如何避免react(dva.js)多次渲染?

问题描述:
当在浏览器中刷新页面时,如下示例代码:

class Test extends Component {

  constructor(props) {
    super(props)
    this.state = {}
  }

  componentWillMount() {
    // 获取所有活动数据
    ...code
  }


  render() {
    const { Test } = this.props;
    
    console.log(Test)
    
    return (
      <div>
          <span>这是一段测试代码</span>
      </div>
    )
  }

会发现在浏览器后台打印出多次Test,其中前几次多为空对象,那么应该如何避免这种情况呢?

阅读 6.6k
5 个回答

shouldComponentUpdate 是可以控制是否渲染更新的

class Test extends Component {

  constructor(props) {
    super(props)
    this.state = {}
  }

  componentWillMount() {
    // 获取所有活动数据
    ...code
  }

  shouldComponentUpdate(nextProps) {
    if (isEqual(nextProps.Test, this.props.Test) {
        return false
    }
  }

  render() {
    const { Test } = this.props;
    
    console.log(Test)
    
    return (
      <div>
          <span>这是一段测试代码</span>
      </div>
    )
  }

1、如果代码结构正确,这种多次渲染并不会存在问题(没获取到数据之前为空,得到数据再次渲染,正常现象),当然如果没正确控制好代码渲染,就会带来各种bug
2、如果想减少不必要渲染,使用shouldcomponenmtupdate

Test来自于props,父组件传过来的,和自己无关, 渲染的时候,给个空值判断就好了吧

PureComponent

如果是函数组件,可以看看 Reac.memo

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题