【发布时间】:2020-06-29 16:33:48
【问题描述】:
我一直试图在不使用任何实用程序库的情况下使用纯 JS 将新项目添加到我的初始状态,这似乎非常复杂。 这里是我初始状态的结构:
const initialState = {
isLoading: false,
events: [
{
year: 2021,
place: [
{ id: 1, name: "BD" },
{ id: 1, name: "BD Test" }
]
},
{ year: 2020,
place: [
{ id: 2, name: "AMS" },
{ id: 1, name: "AMS TEST" }
]
}
]
};
我想为匹配的项目添加一个新属性,这样状态就会像这样修改:
const initialState = {
isLoading: false,
events: [
{
year: 2021,
place: [{ id: 1, name: "BD", newProp:"NewValue" },
{ id: 1, name: "BD Test" }
]
},
{ year: 2020,
place: [
{ id: 2, name: "AMS" },
{ id: 1, name: "AMS TEST" }
] }
]
}; 在我的减速机中,我尝试过:
case actionType.TOGGLE_INFO:
return {
...state,
events: state.events.map((x) => x.place[0].id === action.id
? { ...x, place: [{ ...x.place[0], newProp: "new Value"}] }
: x),
};
该代码更新状态中的值,但随后仅显示事件中的一项(地点)。有什么办法,我仍然可以显示所有事件并在事件中更新选定的位置(通过添加新属性)。我一直在尝试修复它一段时间。因此,我们将不胜感激任何帮助。提前致谢。 到目前为止我的减速器:
const initialState = {
isLoading: false,
events: [
{
year: 2021,
place: [{ id: 1, name: "BD" }, { id: 1, name: "BD Test" }]
},
{ year: 2020,
place: [{ id: 2, name: "AMS" }, { id: 1, name: "AMS TEST" }] }
]
};
const commonReducer = (state = initialState, action = {}) => {
switch (action.type) {
case "FETCH_EVENTS":
return {
...state
};
case "TOGGLE_INFO":
console.log(state.events);
return {
...state,
events: state.events[0].map(event =>
event.id === action.id
? { ...event, place: [{ ...event.place[0], isTouched: true }] }
: event
)
};
default:
return state;
}
};
export default commonReducer;
【问题讨论】:
标签: javascript arrays reactjs object react-redux