深入浅出React和Redux
上QQ阅读APP看书,第一时间看更新

2.2.3 prop和state的对比

总结一下prop和state的区别:

□ prop用于定义外部接口,state用于记录内部状态;

□ prop的赋值在外部世界使用组件时,state的赋值在组件内部;

□ 组件不应该改变prop的值,而state存在的目的就是让组件来改变的。

组件的state,就相当于组件的记忆,其存在意义就是被修改,每一次通过this. setState函数修改state就改变了组件的状态,然后通过渲染过程把这种变化体现出来。

但是,组件是绝不应该去修改传入的props值的,我们设想一下,假如父组件包含多个子组件,然后把一个JavaScript对象作为props值传给这几个子组件,而某个子组件居然改变了这个对象的内部值,那么,接下来其他子组件读取这个对象会得到什么值呢?当时读取了修改过的值,但是其他子组件是每次渲染都读取这个props的值呢?还是只读一次以后就用那个最初值呢?一切皆有可能,完全不可预料。也就是说,一个子组件去修改props中的值,可能让程序陷入一团混乱之中,这就完全违背了React设计的初衷。

还记得第1章中我们看到的那个公式吗?

UI=render(data)

React组件扮演的是render函数的角色,应该是一个没有副作用的纯函数。修改props的值,是一个副作用,组件应该避免。

严格来说,React并没有办法阻止你去修改传入的props对象。所以,每个开发者就把这当做一个规矩,在编码中一定不要踩这儿红线,不然最后可能遇到不可预料的bug。