美文网首页
react.memo

react.memo

作者: Time_Notes | 来源:发表于2022-01-27 14:30 被阅读0次

React.memo 和 JS 的 memorize 函数的区别


https://dmitripavlutin.com/use-react-memo-wisely/ 

使用 React.memo 进行组件记忆

React.memo是一个高阶组件。它很像 PureComponent,但 PureComponent 属于 Component 的类实现,而“memo”则用于创建函数组件。

这里与纯组件类似,如果输入props相同则跳过组件渲染,从而提升组件性能。

它会记忆上次某个输入 prop 的执行输出并提升应用性能。即使在这些组件中比较也是浅层的。

function MyComponent(props) {

  /* 使用 props 渲染 */

}

function areEqual(prevProps, nextProps) {

  /*

  如果把 nextProps 传入 render 方法的返回结果与

  将 prevProps 传入 render 方法的返回结果一致则返回 true,

  否则返回 false

  */

}

export default React.memo(MyComponent, areEqual);

默认情况下其只会对复杂对象做浅层对比,如果你想要控制对比过程,那么请将自定义的比较函数通过第二个参数传入来实现。这与shouldComponentUpdate方法的返回值相反。

你还可以为这个组件传递自定义比较逻辑。

用户可以用自定义逻辑深度对比(deep comparison)对象。如果比较函数返回 false 则重新渲染组件,否则就不会重新渲染。

function CustomisedComponent(props) {

    return (

        <div>

            <b>User name: {props.name}</b>

            <b>User age: {props.age}</b>

            <b>User designation: {props.designation}</b>

        </div>

    )

}

// The component below is the optimised version for the Default Componenent

// The Component will not re-render if same props value for "name" property

var memoComponent = React.memo(CustomisedComponent);

上面的组件将对前后两个 props 的值进行浅层比较。

如果我们将对象引用作为 props 传递给 memo 组件,则需要一些自定义登录以进行比较。在这种情况下,我们可以将比较函数作为第二个参数传递给 React.memo 函数。

假设 props 值(user)是一个对象引用,包含特定用户的 name、age 和 designation。

这种情况下需要进行深入比较。我们可以创建一个自定义函数,查找前后两个 props 值的 name、age 和 designation 的值,如果它们不相同则返回 false。

这样,即使我们将参考数据作为 memo 组件的输入,组件也不会重新渲染。

// The following function takes "user" Object as input parameter in props

function CustomisedComponent(props) {

    return (

        <div>

            <b>User name: {props.user.name}</b>

            <b>User age: {props.user.age}</b>

            <b>User designation: {props.user.designation}</b>

        </div>

    )

}

function userComparator(previosProps, nextProps) {

    if(previosProps.user.name == nextProps.user.name ||

      previosProps.user.age == nextProps.user.age ||

      previosProps.user.designation == nextProps.user.designation) {

        return false

    } else {

        return true;

    }

}

var memoComponent = React.memo(CustomisedComponent, userComparator);

相关文章

  • 如何使用React.memo()

    目录 包装函数 PureComponent React.memo() React.memo() 与Redux 其他...

  • React.memo()

    React 16.6.0 正式发布 React.memo() React.memo() 是什么? React.me...

  • Hooks进阶

    React.memo、useMemo、useCallback 的区别 React.memo 是对传入的 props...

  • [React Hooks] 样例学习---useWhyDidYo

    前置知识 React.memo React.memo 是一个高阶组件。类似于 React.PureComponen...

  • 封装了一个react下拉刷新上拉加载组件

    useState,useEffect,React.memo,Ts 使用等

  • React.memo

    React.memo 为高阶组件。它与 React.PureComponent 非常相似,但它适用于函数组件,但不...

  • react.memo

    React.memo 和 JS 的 memorize 函数的区别 https://dmitripavlutin.c...

  • React.memo

    1.基础使用 React.memo 相当于 React.pureComponent内部的shouldCompone...

  • React.memo

    先来看官网解释: React.memo 为高阶组件。如果你的组件在相同 props 的情况下渲染相同的结果,那么你...

  • React.memo() - React.lazy()

    介绍 包装函数 PureComponent React.memo() Redux配合使用 React.lazy()...

网友评论

      本文标题:react.memo

      本文链接:https://www.haomeiwen.com/subject/bmuonhtx.html