Reactjs 快速连续发送相同的redux操作
我有一个类似按钮的应用程序。用户可以快速连续地喜欢多个帖子。我发送操作来更新likecount,并通过redux操作添加like/user记录Reactjs 快速连续发送相同的redux操作,reactjs,redux,react-redux,redux-saga,Reactjs,Redux,React Redux,Redux Saga,我有一个类似按钮的应用程序。用户可以快速连续地喜欢多个帖子。我发送操作来更新likecount,并通过redux操作添加like/user记录 export const likePost = (payload) => (dispatch) => { dispatch({ type: "LIKE_POST", payload, }); }; 在成功更新的传奇故事中,这两种情况下都会控制操作,但像“发布”一样,成功只会在最后一种情况下触发 f
export const likePost = (payload) => (dispatch) => {
dispatch({
type: "LIKE_POST",
payload,
});
};
在成功更新的传奇故事中,这两种情况下都会控制操作,但像“发布”一样,成功只会在最后一种情况下触发
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未成功触发,虽然两次都已触发,但仅在最后一次触发
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`);
您是否正在使用saga函数的
takeLatest()
效果requestLikePost
?它将只考虑最近的操作调用,如果快速连续发生,则会中止以前的所有调用
改用takeEvery()
saga效果
谢谢,我用的是最新的传奇故事。因为最初的请求是为两个喜欢的人触发的,所以我不这么认为。它被正确地取消了。