将json存储为redux状态

时间:2016-09-14 13:24:46

标签: json redux immutable.js

我从后端收到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);

这可能是有充分理由的吗?这可能是什么原因?

2 个答案:

答案 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不变内容返回到视图,则此方法可能不会成为问题。然后,这可能是一个有效的解决方案,但我认为仍然很容易出错。