angular - 在 Angular NGXS 中将数据附加到状态
问题描述
由于我正在进行服务器端滚动,因此我对如何附加新数据有疑问。当新数据到达时,帖子正在删除旧数据但我只想追加新数据而不是删除帖子中的旧数据
TS
page = 1;
constructor(private store: Store) {
this.store.dispatch(new GetPostsPerPage('', this.page.toString()));
}
onScroll() {
this.store.dispatch(new GetPostsPerPage('', (this.page += 1).toString()));
}
状态
@Action(GetPostsPerPage)
getPostsPerPage(ctx: StateContext<PostStateModel>, { key, pageNumber }: GetPostsPerPage) {
return this.postsService.getPostsPerPage(key, pageNumber).pipe(
tap((result: Post[]) => {
console.log(result);
ctx.patchState({
posts: result['data'],
});
}),
catchError(err => {
console.log(err);
return throwError(err);
})
);
}
解决方案
修补状态时,您需要将结果附加到当前状态值,而不是用posts: result['data']
.
在您的tap
运营商中,您可以使用传播来附加新帖子:
var currentPosts = ctx.getState().posts;
ctx.patchState({
posts: [...currentPosts, ...result['data']]
});
NGXS 还具有一些(相对较新的)内置状态运算符,可以更轻松地处理这些场景,具体请参见运算符的文档append
。
推荐阅读
- android - 如何在每个活动或片段的底部显示 exoplayer 的迷你控制器?
- ldap - Artifactory ldaps 错误的 url/端口
- java - 在Java中通过索引查找第一对最大和
- java - Java 空 Optional 的类型是什么?
- opengl - C++ OpenGL, using more than one uniform
- c# - Visual Studio Extension 在调试时工作,但是当我安装 VSIX 时它不工作
- android - 无法为模拟器构建应用程序
- sql - 如何创建一个新表,基于具有动态内容的现有表,但将历史记录保留在新表中?
- excel - VBA Excel - 循环输出结果列组为 3
- c# - 如果打开了 CSV/Excel 文件,则使用 MessageBox 通知用户并终止应用程序的其余执行 [C# - WPF 应用程序]