angular - 选择器 NGRX 内的调度操作
问题描述
在我的选择器中,我正在检查存储中的数据是否已加载并对应于路由器参数。路由器是“事实来源”,所以如果没有加载数据,我想发送一个动作来获取它。在选择器中做这样的事情可以吗?
(currentGameState, router): Game => {
if (currentGameState.game.id === router.state.params.gameId &&
currentGameState.isLoaded) {
return currentGameState.game;
}
}
解决方案
副作用由效果类处理(调度操作、调用 api 等)。
选择器仅用于使用异步从存储中获取数据。这意味着不要在这里做任何像调度操作这样的副作用。
正常更新您需要在 ngOnInit 中初始化数据加载
export class PostComponent implements OnInit {
public posts$: Observable<IPost[]>;
constructor(private store: Store<IPostManagementState>) {}
ngOnInit(): void {
this.store.dispatch(new GetAllPosts());
this.posts$ = this.store.pipe(select(selectPostList));
}
}
然后在视图中使用异步管道
<div *ngFor="let post of posts$ | async">{{ post.body }}</div>
你可以在这里查看代码
推荐阅读
- python - Asyncio 和 multiprocessing.Process- 如何传递协程?
- python - 多分支逻辑的标志用法
- python - 更改背景颜色后如何保存 Matplotlib 图形?
- asp.net-mvc - 角度动画有条件地应用
- reactjs - 登录后如何从 App.jsx 获取状态?
- r - 使用 train 函数进行交叉验证的问题
- android - Firestore orderBy number 字段不返回任何文档
- asp.net-mvc - 第二个下拉列表未过滤
- apache-nifi - Apache NiFi 识别表达式语言(routeText)中的关系
- ios - 在 iOS 13 上未调用supportedInterfaceOrientations