Redux里面return state和return {...state}有啥区别

#1

为什么我在return之前修改state,如果是return state子组件收到state里面的属性后并不会刷新,新改变的值并不会附上,但是如果使用return {…state}每次改变state的值都会让子组件刷新,获得相应正确的值,但是我在reducer里面打log,会发现即使return state,log里面也是state改变之后的值,也就是说state值改变了,但是子组件没有刷新,还是state原来的值,我在尝试使用componentWillReceiveProps让子组件刷新,但是失败了,子组件就是不刷新,换成return {…state}根本不需要componentWillReceiveProps就能实现自动刷新
我哪操作错了吗,不是很理解

#2

后者是浅复制,state里面是对象的时候就需要这样使用,会生成一个新的对象,也就是你准备传给container的对象,并且不会改变之前的state,如果你直接return state,state会被覆盖

#3

{...state} 是还在提案状态的ES语法

基本上等价于:

Object.assign({}, state)

所以它会返回一个新的对象,和你原来的 state 不是同一个reference。而react中判断是否进行重新渲染也正是基于对组件的state进行 === 比较的方式来判断的,如果不是同一个object就会重新渲染。

1 Like
#4

{…state}会返回一个newState

不要直接return state,而是return newState