javascript - 当相应项中没有值时,从 Redux 初始状态中删除完整对象
问题描述
在我的减速器中,我的初始状态如下所示:
const initialState = {
isLoading: false,
events: [
{
year: 2021,
place: [
{
id: 1,
name: "BD"
},
{
id: 2,
name: "BD Test"
}
]
},
{ year: 2020, place: [{ id: 3, name: "AMS" }, { id: 4, name: "AMS TEST" }] }
]
};
我一直在尝试实现删除操作的功能。因此,当单击按钮时,将调度“deleteItems”操作,该操作将从place
. 此功能工作正常。但是,events
如果place
.
这是我已经尝试过的,但它只是删除了个人place
. place
但是,我需要在这里编写当变为空时删除整个项目的逻辑。
case "deleteItems":
return {
...state,
events: state.events.map(event => {
const place = event.place.find(x => x.id === action.id);
if (place) {
return {
...event,
place: event.place.filter(x => x.id !== action.id)
};
}
return event;
})
};
因此,在修改后,状态将如下所示:(当 2021 年没有值时)
const initialState = {
isLoading: false,
events: [
{ year: 2020, place: [{ id: 3, name: "AMS" }, { id: 4, name: "AMS TEST" }] }
]
};
有谁知道如何做到这一点。任何帮助将不胜感激。在此先感谢。Demo可以从这里看到
解决方案
我先删除了这些地方。然后我根据位置数组是否为空来过滤事件。之后,我返回了状态。
case "deleteItems":
const eventsPostDeletingPlaces = state.events.map(event => {
const place = event.place.find(x => x.id === action.id);
if (place) {
return {
...event,
place: event.place.filter(x => x.id !== action.id)
};
}
return event;
});
const eventsWithPlaces = eventsPostDeletingPlaces.filter((each) => each.place.length);
return {
...state,
events: eventsWithPlaces
}
在此处检查已编辑的沙箱
推荐阅读
- reactjs - 在 IIS 服务器中使用 webpack 部署反应应用程序的白页
- php - Lumen 8 为带参数的 GET 操作返回错误异常
- javascript - Stanza.js,如何查询现有的 MUC 房间?
- javascript - 在父视图框内居中并适合 svg 元素
- java - 通过 ArrayList 从特定类访问变量
- javascript - 在客户端导航上保留状态值 - NextJs - Next-Redux-Wrapper
- python - 将字典与数据框匹配
- math - Web 应用程序的方程/公式编辑器 - 注意:编码,而不是 tex
- javascript - 我想在用 JS 生成的 php 中插入一个 JS 变量
- crystal-reports - 按日期分组会产生不正确的结果