angular - 如何从数组列表中删除数据 - NGXS 状态管理
问题描述
我在尝试 NGXS 状态管理时遇到了问题,问题是如果我使用 id 从数组中删除记录,那么整个数组就会变空。这是我的用户状态的样子。
@State<UserStateModel>({
name: "users",
defaults: {
users: [
{
id: 179,
name: "test",
email: "test@gmail",
},{
id: 190,
name: "test12",
email: "test12@gmail",
}
],
},
})
这就是删除操作的样子
@Action(DeleteUser)
delete(
{ getState, patchState, setState }: StateContext<UserStateModel>,
{ id }
) {
const state = getState();
setState(
patch({
users: state.users.filter((user) => {
user.id !== id;
}),
})
);
}
这就是我在组件中调度动作的方式
export class IndexComponent implements OnInit {
// users: Observable<User>;
@Select(UserState.getUsers) users: Observable<User>;
constructor(private store: Store) {}
deleteUser(id: number) {
this.store.dispatch(new DeleteUser(id));
}
}
解决方案
经过几个小时的尝试终于找到了解决方案并解决了问题。首先,点击这里浏览 NGXS 状态算子官方文档。
“removeItem”操作符是解决这个问题的方法。
import {
patch,
removeItem
} from "@ngxs/store/operators";
export class UserState {
@Action(DeleteUser)
delete(
{ getState, patchState, setState }: StateContext<UserStateModel>,
{ id }
) {
const state = getState();
setState(
patch({
users: removeItem<User>((user) => user.id === id),
})
);
}
}
希望这会有所帮助。
推荐阅读
- mysql - 将另一个表中的 COUNT 作为列的查询的正确 MySQL 语法是什么?
- google-sheets - 谷歌表格按日期和分组查询缺失数据
- karate - 不支持的字符串匹配类型:CONTAINS_DEEP
- python - 如何让 GCP 函数生成的图像在 GC 存储中被识别为有效?
- terraform - 使用 Terraform 脚本部署简单的 helloworld lambda 函数(python) - 创建“测试 lambda”时出错
- linux - 在vim中创建1列中的2列
- javascript - 使用 Javascript 导入图像 SRC
- robots.txt - 禁止在机器人中以“?m = 0”结尾的网址
- java - 使用 AES 加密数据测试 REST 端点
- javascript - 如何编写一个数组方法,该方法返回一个双精度数组,其元素是参数数组元素的滑动平均值