我的问题涉及redux状态更新模式。
如果redux应用程序的状态如下所示:
{a: 1,
b: 2,
c: 3 }
rootReducer = combineReducers({ a: reducerA,
b: reducerB,
c: reducerC })
和reducer函数修改a
的值当c
是某个值时,如何修改a
的值?
function reducerA(
state = {},
{type, payload}
) {
switch(type) {
case VALUE_CHANGED:
if(payload.value === someValue){
/* Change value of state.c here */
}
}
}
答案 0 :(得分:0)
根据其他切片的值更新Redux Store的一个切片是不明智的。
在此示例中,切片将指向值a,b和c中的一个。
const initialStoreState = { a: 1, b: 2, c: 3 }
a,b和c代表应用状态的独立部分。
值a
和b
应代表应用状态的独立切片。
这意味着您不应该在此对象中代表您的应用程序状态(Redux Store)的不同值之间传播相互关联的状态。
数据规范化减少了商店切片之间的状态耦合。
您应该努力通过避免数据结构的嵌套来规范化Redux存储中的数据。
查看Redux Docs Guide to State Normalization
规范化数据的基本概念是:
每种类型的数据在州内都有自己的“表”。
每个“数据表”应该将各个项目存储在一个对象中 项目的ID作为键,项目本身作为值。
任何对单个项目的引用都应该通过存储来完成 item的ID。
应使用ID数组来表示排序。