我从后端收到json数据,我希望将这些数据存储在我的redux商店中。如下所示,将此数据深度转换为Immutable始终是正确的方法:
reducer(state = initialState, action = {})
{
switch(action.type)
{
case "data_update":
return Immutable.fromJS(action.data);
default:
return state;
}
}
我正在处理完成此操作的代码:
case "data_update":
return Immutable.Map(action.data);
这可能是有充分理由的吗?这可能是什么原因?
答案 0 :(得分:0)
将数据转换为Map
是完全可选的!您可以选择不使用Immutable
。因为,Redux的核心概念是存储状态并且永远不会改变它,人们开始使用Immutable
来冻结状态。如果你完全跳过Immutable,那就完全可以了。
将数据深度转换为不可变集合可防止我们意外地改变状态 -
reducer(state = initialState, action = {})
{
switch(action.type)
{
case "data_update":
state.users = action.payload;
break;
default:
return state;
}
}
答案 1 :(得分:0)
如果“ action.data”是一个普通对象,则使用Immutable.Map()是有意义的,但是正如您所提到的,如果它是一个深度嵌套的对象,那么我将使用Immutable.fromJS(),否则您将拥有不变的地图,但上面具有不变的属性。
如果视图接收到该混合对象,则可能会出现问题,因为您将必须通过.get()访问对象属性,然后对properties.properties仅使用点符号。
尽管如果您习惯于让选择器访问不可变对象,然后始终将javascript不变内容返回到视图,则此方法可能不会成为问题。然后,这可能是一个有效的解决方案,但我认为仍然很容易出错。