React-为什么不要直接改state

    使用react的人都知道,react不能直接修改state。但是在修改一些复杂数据的时候,的确比较麻烦,不如直接遍历修改的方便,但这时候你很可能会发现一些问题:

    直接修改state,react不会重新render。这个就不用多说了。另外一点是,setState的更新是异步的,而且,react会将要修改的状态放到一个更新队列,并考虑到render次数,会将多个值一起改变并一次render。其实react官方还是推荐immutable的state,也就是说,我们在改变state的时候,需要重新生成一个对象去代替原来的state,而不是直接改原来的。

    直接修改state会导致state不可预期。来看一个例子。

代码

     Demo组件就是个按钮,点击会把number变成字符串 ‘a’.

样子

来看下结果:

结果

    你会惊奇的发现,我的number应该是个数字,怎么变成字符串了?感谢 js 良好的兼容性吧,这要是其它语言还不一定报什么错呢,可能就崩了。另外,在点击按钮的时候,应该输出 ‘a', 因为没有使用setState,所以没有render。这个例子比较简单,因为没有setState,没有重新render所以没有输出。

    其实更应该注意的是,在改变state的时候,如果有其他地方也在改state,尤其是异步的当中,悄悄改状态,很可能会出现比较棘手的问题。为了做到风险可控,改状态这件事,还是交给setState吧。

你可能感兴趣的:(React-为什么不要直接改state)