Reactjs Redux react不可变setIn元素更改整个列表
我在redux有一个减速机:Reactjs Redux react不可变setIn元素更改整个列表,reactjs,redux,immutable.js,Reactjs,Redux,Immutable.js,我在redux有一个减速机: let index = state.items.findIndex(item => item.get('_id') == action.id); let list = state.items.setIn([index, "selected"], action.selected) return { ...state, items: list } 在这种情况下,当我查看redux更改时,我看到整个列表都更改了,然后我的所有视图都是reders,
let index = state.items.findIndex(item => item.get('_id') == action.id);
let list = state.items.setIn([index, "selected"], action.selected)
return {
...state,
items: list
}
在这种情况下,当我查看redux更改时,我看到整个列表都更改了,然后我的所有视图都是reders,而不是特定的项
我做错了什么
更新:
我改为updateIn,现在我的状态显示只有一个元素被更新,但我的整个应用程序仍然是渲染的,而不是特定的元素:
<Row style={styles.row} key={item.get('_id')} item={item} selected={item.get('selected')}
onSelect={this.props.onRowSelect}/>
看起来您没有使用还原剂合成。我强烈鼓励这样做,因为它使每个减速器更容易理解: 如果看不到组件是如何映射到状态的,很难判断这里发生了什么,但我相信问题的根源在于,从减速器返回的总是一个新对象
- 当您将旧的
与新列表合并时,返回的状态将是一个新对象状态
- Items将成为一个新对象,因为immutablejs所做的一部分是确保如果您更改其中的一个子对象,该更改将向上级联到所有父对象
- 最后,您更新的单个项目将成为新对象
选择器
或MapStateTrops
函数,以阻止它获取项目
,因为它总是会更改,从而总是导致重新加载