react计算属性创建的几种方法 memoize-one缓存

1、计算属性

react中实现类似vue计算属性的方法,用于props与state的计算求值

1、类的get方法设置

可以使用原生的get方法来实现类似计算属性的获取,它用于直接获取props值的计算属性

get getCount(){  //get方式使用计算属性
    return this.props.count*2
}

render() {
    return (
        <p>{this.getCount}</p>
    )
}

2、getDerivedStateFromProps生命周期实现

在新的生命周期钩子中提供了一个能在修改props后在执行这个钩子,通过第一参数获取修改后的props,进行计算后设置state,这个钩子函数设置的state将在本次render中被应用,而shouldComponentUpdate生命周期则会将这个render推入下次的render中,造成多次的渲染

state={
    countChild:0
}


static getDerivedStateFromProps(nextProps,nextState){
    let countChild = nextProps.count*2;  //先进行值的运算,运算完成后对比state状态,如果,不相同进行替换
    if (countChild!==nextState.countChild){
        return {
            countChild  //返回的对象会与state进行合并,并且在这次render进行渲染
        }
    }
    return null  //如果值相同则不更改state
}

这种方式需维护一个状态,并且这个钩子中设置了冗余的判断,所以并不推荐

3、render生命周期实现

render生命周期中使用变量存储可以不需要依靠状态存储

render() {
    let computCount = this.props.count*2;  //将计算放在render函数中来进行渲染
    return (
        <div>
            <p>{computCount}</p>
        </div>
    )
}

这里要是用变量存储不能直接更改更改状态,不然会造成多次渲染,

4、带有缓存的计算属性

在vue中计算属性的作用不只是进行数据的运算,他区别methods的更重要的一点是缓存机制,而在react中进行数据运算的方式虽然很多,但是却没有能够进行缓存的方案,这里可以用第三方模块memoize-one进行数据的缓存

memoize-one缓存的实现

真正计算函数作为参数,返回一个新的函数,新的函数内部会缓存上一次入参以及上一次返回值,如果本次入参与上一次入参相等,则返回上一次返回值,否则,重新调用真正的计算函数,并缓存入参以及结果,供下一次使用。

安装

npm i memoize-one -S

this.createCount = memoizeOne((preCount) => { // 创建构建计算属性的函数
    console.log("计算")
    return preCount*2
})

在render函数中创建一个计算属性

render() {
    let computCount = this.createCount(this.props.count); // 创建计算属性,memoize-one会监听传入参数
    return (
        <div>
            <p>{computCount}</p>  //使用计算属性
        </div>
    )
}

这个计算属性会进行缓存处理,当两次状态的值没有改变不会进行再次计算更新,这样提高了效率

memoize-one的问题

memoize-one具有缓存机制的模块,只要函数中的状态、属性不变,方法不会执行

计算属性对于引用类型还是有问题,我们不应该寄托于让计算属性去判断引用类型里面值更不更改

如果要判断的是引用类型,建议在父组件判定是否进行更新,更新则赋给新值,不更新不执行setState

memoize-one接受两个参数, 第一个参数是要执行的函数,第二个参数(非必填)可以是自定义比较值是否相等的一些方法;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值