我的reducer被执行但是状态没有反应更新

时间:2017-07-24 00:25:34

标签: reactjs react-redux redux-thunk

我在我的项目中使用recat redux,在一个组件中我需要更新我的状态,但由于我正在处理异步调用,我需要在componentDidUpdate中执行动作调用,如下所示:

 componentDidUpdate() {
   this.props.updateHamburgerMenu(this.props.Channel.channelIdArr);
}

这是我的行动:

export function updateHamburgerMenu(channelIdArr) {

return dispatch => {
    dispatch(
        {
            type: "UPDATE_HAMBURGER_MENU",
            payload:   {
                "channelIdArr":channelIdArr
            }

        }
    );

};
}

在我的减速机中我有:

switch (action.type) {
case "UPDATE_HAMBURGER_MENU":

        var channelList=state.allChannelList.slice();

        channelList.unshift({
            "id": channelIdArr[0],
            "channelName": "sssssssss",
            "status": "Inactive"
        });
        alert("reducer called");
        state.allChannelList=channelList;

        break;}
        return state;

现在,当我运行它时,我可以看到警报正在运行,但状态根本没有更新。

我还尝试了另一种方式:

 state={"channelsArr":state.channelsArr,"AllChannels":state.AllChannels,"channelIdArr":state.channelIdArr,"channelLabelForScrolls":[], "latestAction":action.type, "allChannelList":channelList};
        break;

这样,似乎状态不断更新,并且进入无限循环。 这真的令人困惑,任何人都可以帮忙吗?我错过了什么?

更新

当我在另一个reducer中分离allChannelList时,它可以工作。因此,似乎在componentdidupdate的特定情况下更新allChannelList会进入无限循环并且状态会不断更新。我不知道为什么会发生

1 个答案:

答案 0 :(得分:0)

在你的reducer case语句中,你应该返回一个代表当前操作后状态的新对象 - 你似乎试图直接分配给传入的allChannelList属性state对象

return {
    ...state,
    allChannelList: channelList
};