zoukankan      html  css  js  c++  java
  • 子组件跟随父组件re-render

    想象一下这种场景,一个父组件下面一大堆子组件。然后呢,这个父组件re-render。是不是下面的子组件都得跟着re-render。可是很多子组件里面是冤枉的啊!!很多子组件的props 和 state 然而并没有改变啊!!虽然virtual dom 的diff 算法很快。。但是性能也不是这么浪费的啊!!

    class Child  extends Component {
      render() {
        console.log("我re-render了");
        const {name,age} = this.props;
    
          return (
            <div>
              <span>姓名:</span>
              <span>{name}</span>
              <span> age:</span>
              <span>{age}</span>
            </div>
          )
      }
    }
    const Person = pureRender(Child);

    pureRender其实就是一个函数,接受一个Component。把这个Component搞一搞,返回一个Component看他pureRender的源代码就一目了然

    function shouldComponentUpdate(nextProps, nextState) {
      return shallowCompare(this, nextProps, nextState);
    }
    
    function pureRende(component) {
      component.prototype.shouldComponentUpdate = shouldComponentUpdate;
    }
    module.exports = pureRender;

    pureRender很简单,就是把传进来的component的shouldComponentUpdate给重写掉了,原来的shouldComponentUpdate,无论怎样都是return ture,现在不了,我要用shallowCompare比一比,shallowCompare代码及其简单,如下

    function shallowCompare(instance, nextProps, nextState) {
      return !shallowEqual(instance.props, nextProps) || !shallowEqual(instance.state, nextState);
    }

    一目了然。分别拿现在props&state和要传进来的props&state,用shallowEqual比一比,要是props&state都一样的话,就return false

  • 相关阅读:
    QBoxLayout中setSpacing(int)和addSpacing(int)的区别
    BZOJ1017 树形DP
    树形DP 2415HDU
    树形DP基础题 HDU1520
    最小生成树个数 并查集压缩路径
    伸展树基本概念基本题目
    BZOJ1010单调性DP优化
    BZOJ1009 矩阵快速幂+DP+KMP
    字典树(数组实现)
    poj 1611 The Suspects(并查集输出集合个数)
  • 原文地址:https://www.cnblogs.com/crazycode2/p/9086659.html
Copyright © 2011-2022 走看看