У меня есть приложение с кнопкой лайка. Пользователь может лайкать несколько сообщений подряд. Я отправляю действие для обновления likecount и добавляю запись like / user через действие redux.
export const likePost = (payload) => (dispatch) => {
dispatch({
type: "LIKE_POST",
payload,
});
};
В саге об успешном обновлении управление действием происходит в обоих случаях, но LIKE_POST_SUCCESSFUL запускается только для последнего .
function* requestLikePost(action) {
const { postId } = action.payload;
try {
const response = yield call(callLikePostsApi, postId);
yield put({
type: "LIKE_POST_SUCCESSFUL",
payload: response.data,
});
} catch (error) {
yield put({
type: "LIKE_POST_FAILED",
payload: error.response.data,
});
}
}
Это действие приема в редукторе. LIKE_POST запускается два раза, как ожидалось, но не LIKE_POST_SUCCESSFUL, он запускается только для последнего, хотя оба достигнуты.
case "LIKE_POST":
return {
...state,
errors: {},
};
case "LIKE_POST_SUCCESSFUL":
updatedPosts = state.posts.map((post) => {
if (post.postId === action.payload.postId) {
return action.payload;
}
return post;
});
updatedLikes = [
...state.likes,
{ userName: state.profile.userName, postId: action.payload.postId },
];
console.log("updatedLikes", updatedLikes, action.payload);
return {
...state,
posts: updatedPosts,
likes: updatedLikes,
loading: false,
};
вызов API
const callLikePostsApi = (postId) => axios.get(`/post/${postId}/like`);