【发布时间】:2020-06-21 23:07:47
【问题描述】:
所以我正在开发一个 React 项目,该项目具有与 instagram 相关的功能,以便获取数据(您可以将其称为提要)。
const feeds = [{
postId: 1,
body: "My first post,
commentList: [{
commentId: 1,
comment: "I love this post"
}],
isFollowing: true,
likers: [1]
}, ]
所以每个项目的视觉必须有一个喜欢/不喜欢按钮,关注/取消关注按钮和评论表单的创建。我只想更新该项目,而不是当我单击一个项目上的“赞”按钮时,它会更新列表中的其他项目。
从我目前所做的来看,当您单击赞按钮时,它会调度一个动作并将状态更新为 isLike: true ,这将用于更改赞按钮的颜色,但它会影响列表中的每个项目
-
处理like和like按钮的函数
const handleLikeClick = () => { const data = { postId, }; props.unlikePost(data, token); }; const handleUnlikeClick = () => { const data = { postId, }; props.likePost(data, token); };-
视图取决于状态取决于调度的动作
)}{isLike ? ( <i onClick={handleLikeClick}> <img src={IconLike} alt="" /> </i> ) : ( -
处理对 api 的请求的函数
-
export const likePost = (data) => async (
dispatch
) => {
dispatch(likePostSuccess())
await axios
.post(url, data)
.then((response) => {
dispatch(likePostSuccess())
})
.catch(({ err }) => {
dispatch(likePostFailure());
});
};
export const unlikePost = (data) => async (
dispatch
) => {
dispatch(unlikePostSuccess())
await axios
.delete(url,{
data: {
postId: data
}
})
.then((response) => {
dispatch(unlikePostSuccess())
})
.catch(({ err }) => {
dispatch(unlikePostFailure());
});
};
- reducer 文件
const initialState = {
isLike: false,
}
case Actions.LIKE_POST_SUCCESSFUL:
return {
...state,
loading: false,
isLike: true,
};
case Actions.LIKE_POST_FAILURE:
return {
...state,
loading: false,
isLike: false
};
case Actions.UNLIKE_POST_SUCCESSFUL:
return {
...state,
loading: false,
isLike: false,
};
case Actions.UNLIKE_POST_FAILURE:
return {
...state,
loading: false,
isLike: true
};
所以这就是我到目前为止所拥有的,一旦动作被调度并且 isLike 被更新,它应该改变列表中每个项目的“like”按钮的颜色,而不是列表中的所有内容。 提前致谢。
【问题讨论】:
-
我不确定我是否理解这个问题。如果您想更新一个值,只需查看相关数组并更新特定对象。
-
@MrBrN197 是的,我可以查看数组,但在这里我使用 react Redux 来更改按钮的状态,所以当动作被调度时,如果成功,它会更新 isLike:true。所以 isLike 将在组件中用于更改按钮,但是当我单击该按钮进行喜欢时,它也会影响列表中的其他项目
标签: javascript arrays reactjs redux react-redux