У меня есть кнопка публикации, которая вызывает метод addPost () для отправки действия (Добавить запись на сервер), а затем выбирает добавленный идентификатор записи.У меня есть редуктор Add_Success, чтобы назначить добавленный идентификатор сообщения в selectedPostId, который будет использоваться селектором getCurrentPostHeaderId.
Правильный порядок выполнения, который я ожидаю, следующий: 1. Отправьте действие AddPost 2. Выберите добавленный идентификатор записи
Но после первого выполнения порядок всегда был неправильным: 1. Выберитепредыдущий пост Id 2. Отправка действия AddPost 3. Выберите добавленный пост 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.
Может кто-нибудь помочь мне в этом?Спасибо