首页 > 解决方案 > 如何正确操作 Reducer 内部的状态

问题描述

我的减速器内部有以下情况。当用户回答问题时触发。当用户回答问题时,需要将其从嵌套数组中移除。

示例问题对象(这些在数组中)

{
    "title": "Quick Questions",
    "questions": [
        "title": "Hello?"
        "answers" [ /*... array of answers in here */ ]
    ]
}

我的减速机案例

case ANSWER_QUESTION:
    // The 0s here would be dynamically populated
    state.questionGroups[0].questions.splice(0, 1)

    return Object.assign({}, {
        ...state,
    })

但是,这里我直接操作状态,我知道这是不正确的,并且会导致 redux 无法正确更新状态以使我的组件重新渲染。

这样做的正确方法是什么?

编辑:这可能是也可能不是我的组件不重新渲染的原因。这可能与 usingconnect()仅适用于浅比较的事实有关,对吗?

标签: react-nativereduxreact-redux

解决方案


每次你应该返回一个新对象。您可以轻松地使用 ES6 功能。

case ANSWER_QUESTION:
        return {
            ...state,
            questionGroups[0]: [...state.questionGroups[0].questions.slice(0, action.payload), ...state.questionGroups[0].questions.slice(action.payload + 1)]
    }

推荐阅读