我有一个发布按钮,它将触发addPost()方法调度动作(将发布添加到服务器),然后选择添加的发布ID。我有一个Add_Success简化程序,将添加的帖子ID分配给selectedPostId,它将由getCurrentPostHeaderId选择器使用。
我期望的正确执行顺序是: 1.调度AddPost操作 2.选择添加的帖子ID
但是第一次执行后,订单总是出错: 1.选择上一个帖子ID 2.调度AddPost操作 3.选择添加的帖子ID
在第一次运行时,执行是正确的,已调度了操作,并且在日志中显示了正确的添加ID。
但是,如果我在第一次运行后立即添加另一篇文章,似乎旧的选择器将首先执行,并且将显示先前的ID。此后,将仅成功添加新帖子,并选择新帖子ID。
我的组件:
addPost() {
const postStatus = Object.assign({}, this.newPostForm.value);
let postHeader: any = {};
postHeader.postStatus = postStatus;
this.store.dispatch(new postHeaderActions.AddToPost(postHeader)); //Add post
this.store.select(
fromPost.getCurrentPostHeaderId
)
.subscribe((post) => {
if (post) {
console.log(post); //Return the new added post id
}
});
}
我的减速机和选择器:
case ActionTypes.Add_Success: {
console.log('hey');
return postHeaderAdapter.addOne(action.payload, {
...state,
selectedPostId: action.payload.id,
loaded: true
});
}
export const getCurrentPostHeaderId = createSelector(
getPostHeaderFeatureState,
(state: PostHeaderState) => state.selectedPostId
);
多次运行同样如此,您可以看到从第二次运行起,它将在显示新ID之前返回先前的ID。
有人可以帮我吗?谢谢
答案 0 :(得分:0)
仅监听下一个ID的一种方法是仅在ID更改后才监听:
this.store.select(
fromPost.getCurrentPostHeaderId
)
.pipe(distinctUntilChanged())
.subscribe(...)