React hooks memo

Memo

React.memo() 和 PureComponent 很相似,它帮助我们控制何时重新渲染组件。
目前的理解就是,memo帮我们缓存组件,通过第二个参数的条件判断是否重新渲染

例子

父组件更新, 子组件不使用memo
本次父组件不传递任何属性给子组件, 父组件更新属性,子组件刷新

import React, { useState, memo } from 'react';
import PropTypes from 'prop-types';

const Child = (props) => {
    return (
        <div className="child-container">
            这是子组件,内容固定,父组件更新的时候,我可以不用更新
        </div>
    );
}

Child.defaultProps = {
    val: ""
}

Child.propTypes = {
    val: PropTypes.oneOfType([PropTypes.string, PropTypes.number])
}

export default Child

父组件更新, 子组件memo不使用第二个参数
应该是默认对比pre和next里的每一项内容
本次父组件不传递任何属性给子组件, 父组件更新属性,子组件不刷新

import React, { useState, memo } from 'react';
import PropTypes from 'prop-types';

const Child = memo((props) => {
    return (
        <div className="child-container">
            这是子组件,内容固定,父组件更新的时候,我可以不用更新
        </div>
    );
})

Child.defaultProps = {
    val: ""
}

Child.propTypes = {
    val: PropTypes.oneOfType([PropTypes.string, PropTypes.number])
}

export default Child
使用memo第二个参数

对比父组件传递给子组件的所有属性
有变化则更新

const Child = memo((props) => {
    return (
        <div className="child-container">
            这是子组件,内容固定,父组件更新的时候,我可以不用更新
        </div>
    );
}, (pre, next) => {
    const keys = Reflect.ownKeys(next)
    return keys.every(i => pre[i] === next[i])
})
使用memo第二个参数, 对比某一个属性

对比父组件传递给子组件的所有属性
有变化则更新

const Child = memo((props) => {
    return (
        <div className="child-container">
            这是子组件,内容固定,父组件更新的时候,我可以不用更新
        </div>
    );
}, (pre, next) => {
    return pre.val === next.val
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值