zoukankan      html  css  js  c++  java
  • React 性能优化

    React性能优化

    性能优化的重点

      1.setState之后,组件进行渲染,无论state是否改变;
      2.父组件渲染后,子组件跟着渲染;
    

    hooks之前

      class组件
      1.class *** extends React.PureComponent      
            对props进行一次浅比较。局限性:只有传入值属性的对比,如果传入的值内部发生变化,PureComponent 是会出现,数据更新,视图不更新的情况的
      2.生命周期shouldComponentUpdate
            shouldComponentUpdate (nextProps, nextState) {
                  if (nextProps.name === this.props.name) return false
                  return true
            }
            通过对比前后props,state返回true/false决定组件是否渲染
      function组件
      1.React.memo() 高阶组件,类似于pureComponent,对class组件不起作用
            React.memo() 可以支持指定一个参数,可以相当于 shouldComponentUpdate 的作用
            const isEqual = (prevProps, nextProps) => {
                if (prevProps.number !== nextProps.number) {
                    return false;
                }
                return true;
            }
            export default memo((props = {}) => {
                console.log(`--- memo re-render ---`);
                return (
                    <div>
                        {/* <p>step is : {props.step}</p> */}
                        {/* <p>count is : {props.count}</p> */}
                        <p>number is : {props.number}</p>
                    </div>
                );
            }, isEqual);
    

    hooks

      React.useMemo() 
      React.callback() 
    

    在子组件不需要父组件的值和函数的情况下,只需要使用 memo 函数包裹子组件即可。

    如果有函数传递给子组件,使用 useCallback

    如果有值传递给子组件,使用 useMemo

    useEffect、useMemo、useCallback 都是自带闭包的。也就是说,每一次组件的渲染,其都会捕获当前组件函数上下文中的状态(state, props),所以每一次这三种hooks的执行,反映的也都是当前的状态,你无法使用它们来捕获上一次的状态。对于这种情况,我们应该使用 ref 来访问。

  • 相关阅读:
    css 超出两行省略号,超出一行省略号
    css 去掉i标签默认斜体样式
    Spring 使用单选按钮
    Spring Maven工程引入css,js
    Sping 补充完成修改功能
    Spring 控制器层如何启用验证?
    Spring 控制器层如何调用DAO层
    spring boot工程如何启用 热启动功能
    Spring 视图层如何显示验证消息提示
    Sping POJO中如何添加验证规则和验证消息提示
  • 原文地址:https://www.cnblogs.com/-swz/p/14174411.html
Copyright © 2011-2022 走看看