问题描述
{
"likes": 1,"comments": [],"_id": "5f3eb143167cbe1014ecdf3d","user": {
"_id": "5f39496b7e78810b801b3ff8","name": "jon doe"
},"title": "post 1","img_url": "https://url.com","date": "2020-08-20T17:22:11.324Z","__v": 1
}
const postAddLike = async (id) => {
try {
const res = await axios.put(`/api/posts/like/${id}`)
console.log(res.data)
dispatch({
type: POST_ADD_LIKE,payload: res.data
})
} catch (err) {
}
}
API运行良好,并且确实类似于post,但是我的reducer做了其他事情,这里是reducer:
case POST_ADD_LIKE:
return {
...state,allPosts : state.allPosts.map(post => post._id === action.payload._id ? post.likes = post.likes+1 : post = post)
}
(allPosts是我处于上下文状态的帖子数组),
我的化简器所做的就是用'1'替换我的整个对象,我想它来自化简器中的'+1',我只是想让'likes'属性增加。 有人帮忙!在此先感谢:D
解决方法
您可以尝试这样的事情
allPosts: state.allPosts.map(post => post._id === action.payload._id ? { ...post,likes: post.likes+1 } : post);
尽管我会说像这样格式化它会使阅读起来更容易
allPosts: state.allPosts.map(post => (
...post,likes: post.likes + (post._id === action.payload._id ? 1: 0),)