是否可以在reducer中选择数据并将这些数据放入其中一个状态?

时间:2016-12-29 08:26:52

标签: reactjs pagination redux

我有订单状态。

在秩序状态下,有以下状态。

const initialState = {
 channel: null,
 order: {},
 fetching:true,
 menu: [],
 categories: [],
 subcategories: [],
 currentCategoryId: 1,
 currentSubcategoryId: 5,
 currentMenu: [],
};

所以menu是数据库中所有食品项目的列表。 categories是菜单类别列表,subcategories是所有子类别的列表。

现在,当用户点击类别选择器时,它会更改currentCategoryId的值,并显示包含所选category_id的项目。 currentSubcategoryIdcurrentCategoryId的工作方式相同。

所以现在我正试图为菜单做分页。为了对菜单进行分页,我需要根据category_idsubcategory_id计算出有多少菜单,例如,当currentCategoryId为1时,有多少菜单{{1 }}在那儿。所以我做了category_id = 1。我要对currentMenu尝试做的是,当用户点击类别选择器来更改currentMenu时,它会更改reducer中的值并获取currentCategoryId等于更改category_id的菜单}。

currentCategoryId

所以我做了如上所述的reducer案例,但我不知道如何将if语句值的结果插入case Constants.CHANGE_CATEGORY: return {...state, currentCategoryId: action.categoryId, currentMenu: state.menu.map((menu) => { if (currentCategoryId === category_id) { // Put results of if statement to currentMenu array.. } })}; 数组......我怎样才能实现这一点?有什么建议吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果我找到了你,那么你可以使用名为' react-addons-update'的非常棒的包。

例如,您可以执行以下操作:

import update from 'react-addons-update'
...
...
case Constants.CHANGE_CATEGORY:
    ...
        if (currentCategoryId === category_id) {
            ...
            return update(state, {
            $merge: { [currentMenu]: value }
        });
            ...
        }
    })};

另一个有用的命令如$ merge是$ set。

您可以阅读更多here