②还有一个问题:当 setState 或者是 return 返回一个 state 的属性去合并状态值时,是会替换原 state 对象的对应属性,还是会新开一个 state 对象把旧的属性和新的属性合并起来?我猜应该是新开 state 对象,这样 react 会很容易意识到状态发生了变化。合并的时候又有问题了:是直接把传的属性合并进去还是复制了一份传的属性。
③又出现个问题,如果是直接把传的属性合并进去了,当这个属性和原本状态值里的属性是同一个对象时(假设由父组件引用传值给子组件),react 是如何判断状态值发生了变化的,因为此时属性引用的对象是没变化的,只是引用对象的属性发生了变化(或者是判断该属性本身的内存地址和原来的 state 该属性的内存地址是否发生变化,如果变化了,说明这个属性肯定是新合并进来的,至于值变没变就不考虑了,直接渲染使用该属性的页面元素)。如果是新开一个 state 对象,那么 react 可能认为全部的状态值都发生了变化而触发渲染。或者是 react 维护之前旧的 state,和新的 state 作对比,如果 state 的某个属性的对象地址变了(也可能不变),就认为这个值发生了变化从而只是重新渲染对应该值的页面元素。而如果像前面说的,如果是 state 的对象地址并没有变化,那么 react 是如何判断要重新渲染的,还是说无脑渲染,不管变没变?