Redux将UI属性添加到状态对象

时间:2017-04-21 21:39:33

标签: redux react-redux

假设我的redux应用程序中有一个初始状态,如下所示:

{
    themeParks : []
}

主题公园对象存储在MongoDB中或者像这样的地方:

{
    ParkName : "Disney World",
    NumberOfRides : 25
}

我的应用程序获取(通过ajax)并在加载时显示主题公园,并让我进行CRUD操作以添加/删除/编辑主题公园。

我的问题是,应用程序中合并我需要的新属性的最佳点是什么,这些属性与UI更改有关并需要包含在状态中?例如,在某些时候我需要为每个主题公园添加一个“编辑”布尔属性,所以它们看起来像这样:

{
    ParkName : "Disney World",
    NumberOfRides : 25,
    editing : false
}

这个“编辑”标志需要是每个主题公园对象的属性,以便能够在使用应用程序时使多个主题公园处于可编辑状态,这是正确的吗?显然,我不希望或不需要在我的数据库模式中存储此标志,因为它只与UI操作有关。

我的第一个猜测是在成功返回数据之后在我的.then函数中包含这样的逻辑,就像这样,但我不确定:

let ajax = new AjaxHanlder();
let promise = ajax.DoGet('/path/to/api-endpoint');
promise.then((themeParks) => {
    themeParks.map((themePark, i) => {
        themePark.editing = false;
    });
    dispatch({type : LOAD_THEME_PARKS, payload : themeParks});
});

另外,是否有一个约定在主题公园对象加载之前提供它的定义,因为初始状态是一个空数组并且不知道它?

提前感谢您对此有任何见解,因为我试图提升我对redux设计模式的了解: - )

1 个答案:

答案 0 :(得分:1)

我建议将editing属性添加到LOAD_THEME_PARKS缩减器中。例如,LOAD_THEME_PARKS缩减器的一部分可能如下所示:

case LOAD_THEME_PARKS:
    return {
          ...state,
          themeParks: action.payload.map(park => park.editing = false)
    };