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

  • 相关阅读:
    LeetCode 264. Ugly Number II
    LeetCode 231. Power of Two
    LeetCode 263. Ugly Number
    LeetCode 136. Single Number
    LeetCode 69. Sqrt(x)
    LeetCode 66. Plus One
    LeetCode 70. Climbing Stairs
    LeetCode 628. Maximum Product of Three Numbers
    Leetcode 13. Roman to Integer
    大二暑假周进度报告03
  • 原文地址:https://www.cnblogs.com/crazycode2/p/9086659.html
Copyright © 2011-2022 走看看