Я пытаюсь удалить сообщение пользователя. Когда я нажимаю кнопку delete
под сообщением, она должна быть удалена в режиме реального времени, как будто мне не нужно обновлять sh страницу для ее удаления.
У меня есть серверная часть контроллер готов, но есть некоторая путаница в части редукса, например, как мне структурировать свое действие.
deletePost: async (req, res) => {
try {
const post = await Post.findByIdAndDelete(req.params.id)
if (!post) {
return res.status(200).json({ error: "No post found"})
}
return res.status(200).json({ post })
} catch(error) {
return res.json({ error })
}
}
export const deletePost = (id) => {
return async dispatch => {
dispatch({ type: "DELETING_POST_START" })
try {
return await axios.delete(`http://localhost:3000/api/v1/posts/${id}/delete`)
}
dispatch({ type: "DELETING_POST_SUCCESS" })
.........how should i structure this action creator_
постредуктор
const initialState = {
isAddingPost: false,
postError: null,
post: {},
isFetchingPosts: null,
hasFetchedPosts: null,
fetchingPostsError: null,
postList: []
}
const post = (state = initialState, action) => {
switch (action.type) {
case "ADD_POST_STARTS":
return { ...state, isAddingpost: true, postError: null }
case "ADD_POST_SUCCESS":
return {
...state,
isAddingpost: false,
postError: null,
post: action.data
}
case "ADD_POST_ERROR":
return {
...state,
isAddingpost: false,
postError: action.data.error,
post: {}
}
case "FETCHING_POSTS_START":
return {
...state,
isFetchingPosts: true,
hasFetchedPosts: false,
fetchingPostsError: null
}
case "FETCHING_POSTS_SUCCESS":
return {
...state,
isFetchingPosts: false,
hasFetchedPosts: true,
fetchingPostsError: null,
postList: action.data.posts
}
case "FETCHING_POSTS_ERROR":
return {
...state,
isFetchingPosts: false,
hasFetchedPosts: false,
fetchingPostsError: action.data.error
}
default:
return state
}
}
export default post
Также У меня есть другой редуктор:
const initialState = {
isFetchingUserPosts: null,
isFetchedUserPosts: null,
userPosts: [],
fetchingUserPostsError: null
}
const userPosts = (state = initialState, action) => {
switch (action.type) {
case "FETCHING_USER_POSTS_START":
return {
...state,
isFetchingUserPosts: true,
fetchingUserPostsError: null
}
case "FETCHING_USER_POSTS_SUCCESS":
return {
...state,
isFetchingUserPosts: false,
isFetchedUserPosts: true,
userPosts: action.data,
fetchingUserPostsError: null
}
case "FETCHING_USER_POSTS_ERROR":
return {
...state,
isFetchingUserPosts: false,
isFetchedUserPosts: false,
userPostsError: action.data.error
}
default:
return state
}
}
export default userPosts