【问题标题】:Updating styles of a styled-component on props change slow?在道具上更新样式组件的样式变化缓慢?
【发布时间】:2018-08-19 01:06:32
【问题描述】:

在我的父组件中,我有一个 onScroll 侦听器,用于确定滚动时是否命中特定点。状态中存储了一个布尔值。我将此状态变量传递给一个孩子。在那个孩子中,我有一个样式化的组件,它随着作为道具传递的布尔状态变量而变化。当我滚动得非常快时,css 似乎变化得很慢。有没有办法加快速度?

父组件:

 class Parent extends Component {
  constructor(props) {
    super(props);
    this.state = {
      flag: false
    }
  }

  componentDidMount() {
    var test = ReactDOM.findDOMNode(this.refs.test);
    test.addEventListener('scroll', this.handleScroll);
  }

  handleScroll = () => {
    if (test.scrollTop = 10) {
      this.setState({
        flag: true
      })
    } else {
      this.setState({
        flag: false
      })
    };
  }
  render() { 
    return (
      <Component ref="test" >
      <Child flag={
        this.state.flag
      }/> 
      </Component>
    )
  }
}

子组件:

const Container = styled.div`
     height: ${({flag})=>flag ? "10px" : "50px"}
`;

....
....
....

render(){
  <Container flag={this.props.flag}/>
}

这是我通常所做的一个非常基本的想法,当我快速滚动超过触发点时,渲染之前需要一秒钟。无论如何我可以避免这种延迟并加快速度。或者你们有没有更好的方法推荐这样做。

【问题讨论】:

  • test 未在 handleScroll 中声明,但您正在使用它进行条件检查

标签: css reactjs scroll delay styled-components


【解决方案1】:

handleScroll 方法中,您没有声明测试。您应该执行以下操作:

class Parent extends Component {
  constructor(props) {
    super(props);
    this.state = {
      flag: false
    }
  }

  componentDidMount() {
    var test = ReactDOM.findDOMNode(this.refs.test);
    test.addEventListener('scroll', this.handleScroll);
  }

  handleScroll = (event) => {
    if (event.scrollTop = 10) {
      this.setState({
        flag: true
      })
    } else {
      this.setState({
        flag: false
      })
    };
  }
  render() {
    return ( 
      <Component ref="test">
        <Child flag={
          this.state.flag
        }/> 
      </Component>
    )
  }
}

【讨论】:

  • 如果你这样做,事件是未定义的
  • 同样这并不能解决渲染问题,快速滚动时css更改仍然存在延迟。
  • 问题是事件监听器在快速滚动时需要一段时间才能执行,因为它必须跟上。
猜你喜欢
  • 2020-12-07
  • 2018-10-15
  • 2020-04-28
  • 1970-01-01
  • 2021-08-24
  • 2018-05-18
  • 1970-01-01
  • 2021-05-10
  • 1970-01-01
相关资源
最近更新 更多