在React中,setState更新操作后没有更新state中的数据的问题。为什么setState后,没有更新到state中的值

在React中,setState更新操作后没有更新state中的数据的问题。为什么setState后,没有更新到state中的值

  • 问题描述:经常会看到这样一个问题,明明已经调用setState的方法了,但是state的值不改变,或者是数据改变了,但是没有重新渲染。找到了几个解决办法,记录一下。

  • 思路一、可能是setState(value)中的value值的引用地址与state的一样
    就比如最常用遇到的,对象或者数组的更新操作可能失败(最常遇到) 可能是这样的:
    **

		const [a,seta] = useState<number[]>([])
		()=>{const b = a;b.push(1);seta(b)}

以上代码的结果,肯定是a变量是不会改变的,可以用useEffect函数去监听一下useeffect(()=>{console.log(a)},[a])
原因很简单,就是因为
b=a,这是种浅拷贝方式,而且push只是往数组里添加元素并返回长度,所以在react看来,b和a没有区别,就不会导致更新操作。
所以一般正确的办法是:使用扩展运算符,所以就是: seta([…b])

[…b]这是一个新的数组,然后扩展b数组的元素到新数组,引用地址已经不一样了
所以总结:善用…扩展运算符

如果这还不行,那就使用函数式的setState,也就是会把setState中的函数的返回值作为最新的state去更新,而且在函数式中,可以从参数获取到最新的state的值
也就是还可以这样: seta(value=>[…value,1]) 这是最保险的方式了

  • 思路二、可能调用这个set方法的onClick点击事件,被父元素的点击事件给覆盖了,而父组件也有set方法,这可能就会导致覆盖掉了子元素的set事件
    在这里插入图片描述

    就像是这样的问题,如果父子元素的点击事件都有更新state的操作,就会导致其中之一的更新state失败
    在这里插入图片描述

最好的办法就是让他的另一个子元素来操控父元素的点击事件

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无心同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值