【发布时间】:2020-04-18 21:21:31
【问题描述】:
我有一个代码沙箱来演示我在使用 Redux 和 React 时遇到的问题。
https://codesandbox.io/s/reactredux-3edy8
基本上这个reducer不起作用:
const initialState = {
byId: {}
};
function addReducer(state = initialState, action) {
switch (action.type) {
case "RECEIVE_DATA":
return {
...state,
byId: {
...state.byId,
[action.payload.id]: [
...state.byId[action.payload.id],
action.payload.data
]
}
};
default:
return state;
}
}
export default addReducer;
这里是动作:
import { RECEIVE_DATA } from "./actionTypes";
export function action() {
return {
type: RECEIVE_DATA,
payload: {
id: Math.floor(Math.random() * 2),
data: Math.floor(Math.random() * 10000)
}
};
}
在我自己的应用程序中,它会抛出一个错误,例如 state.byId[action.payload.id] is not iterable,这是真的。但是如何将值推送到尚不存在的数组,因为我不知道 id?
我认为可以通过更改 initialState 来解决该问题,或者可能有一个我不知道的函数允许我为其创建 array 或 push。
【问题讨论】:
-
因此,例如,如果您的操作的
payload.id为 1,而您的payload.data为 1000,您希望state.byId.1包含什么值? -
state.byId["1"]将是["1000"]如果{ id: 1, data: 2000 }发生另一个动作,那么状态将是:{ byId: { "1": ["1000", "2000"] } }但是,我找到了我相信的答案......现在将其输入.
标签: javascript arrays reactjs redux