Redux Reducer:在返回新状态时将对象添加到数组

时间:2018-11-09 19:30:12

标签: reactjs redux

我是Redux的新手,我正努力避免以错误的方式做事。

我在使用redux-thunk。我有一个函数可以调用API,并根据是否有错误来分派: fetchUserOK(数据)或fetchUserErr(数据)

在我的化简文件上,如果是,则切换

FETCH_USER_OK我这样做:

return action.payload;

我做的FETCH_USER_ERR:

return [...state, { error: action.payload }];

我认为return action.payload;可以,我不需要传播以前的状态。请改正我,如果我错了。 但是,我不知道我在为错误做的事情是否正确:

return [...state, { error: action.payload }];

OK的有效负载看起来像

[{id: 1, name: "Peter"}, {id: 2, name: "Kevin"}, {id: 3, name: "Paul"}]

ERR的有效负载:字符串

404

我应该返回状态(... state)吗? 我应该在{} key:value之间换行吗?

我将不胜感激。 我正在努力避免不良做法。

1 个答案:

答案 0 :(得分:0)

基本上,当您实际上正在更新状态时,reducer返回更新状态,这意味着从状态复制所有字段,并在第一个{...state, anyfield: action.payload}之后替换所有字段。建议始终使用immutable update patterns更新状态,而不要先进行,,然后再进行state.somefield = value

所以回答您的问题。据我了解,减速器必须始终返回更新状态,因此仅返回return state并不是正确的方法。您必须始终按...状态添加现有状态。

[更新]

您可以阅读this文章。它将告诉您有关Redux循环的信息。减速器返回的任何内容都将替换应用程序的先前状态,因此您始终希望返回更新后的状态将是所有字段,而不是操作有效负载。