Reactjs react-native中的增量值
我从一个有效载荷中获取数据,每个帖子上都有一个喜欢的总数。在用户屏幕上,有一个图标让用户喜欢一篇文章,我想实现的是,当用户点击它时,显示的值将增加到该特定文章的+1 视图:Reactjs react-native中的增量值,reactjs,react-native,Reactjs,React Native,我从一个有效载荷中获取数据,每个帖子上都有一个喜欢的总数。在用户屏幕上,有一个图标让用户喜欢一篇文章,我想实现的是,当用户点击它时,显示的值将增加到该特定文章的+1 视图: 您正在状态变量中存储POST数据,因此请使用setState对其进行更新。使用map检查每篇文章,只要id(每篇文章的唯一属性)与单击项目的id匹配,增加其likeCount,否则返回相同的数据 这样写: onLikePost = (item) => { this.setState(prevState =>
您正在状态变量中存储POST数据,因此请使用
setState
对其进行更新。使用map
检查每篇文章,只要id(每篇文章的唯一属性)与单击项目的id匹配,增加其likeCount,否则返回相同的数据
这样写:
onLikePost = (item) => {
this.setState(prevState => ({
posts: prevState.posts.map(el => el.id === item.id? {...el, likesCount: el.likesCount+1} : el)
}))
}
更新:在更新计数值之前进行检查,并同时更改isLikedbool
onLikePost = (item) => {
this.setState(prevState => ({
posts: prevState.posts.map(el => {
if(el.id === item.id) {
return {
...el,
isLiked: !el.isLiked,
likesCount: !el.isLiked? el.likesCount+1 : el.likesCount-1,
}
}
return el;
})
}))
}
注意:我假设每个帖子都有一个键
id
唯一值,若它不存在,那个么使用每个帖子的任何其他唯一属性。若数组序列不是问题,那个么可以使用项索引并使用setState
来更新它
<Icon
onPress={()=>onLikePost(i)}
...
/>
...
onLikePost = (i) => {
let posts = this.state.posts;
posts[i].likesCount = !posts[i].isLiked ? posts[i].likesCount + 1 : posts[i].likesCount - 1;
posts[i].isLiked = !posts[i].isLiked;
this.setState({ posts: posts})
}
onLikePost(i)}
...
/>
...
onLikePost=(i)=>{
让posts=this.state.posts;
posts[i]。likescont=!posts[i]。islike?posts[i]。likescont+1:posts[i]。likescont-1;
posts[i].isLiked=!posts[i].isLiked;
this.setState({posts:posts})
}
谢谢,它成功了。还有一件事,当isLiked变为false时,它能做减法吗?isLiked是固定的,或者单击like按钮时它也会改变?单击后它会改变检查更新的答案,如果它不起作用,请告诉我。当isLiked值为零时,单击它会变为NaN
onLikePost = (item) => {
this.setState(prevState => ({
posts: prevState.posts.map(el => {
if(el.id === item.id) {
return {
...el,
isLiked: !el.isLiked,
likesCount: !el.isLiked? el.likesCount+1 : el.likesCount-1,
}
}
return el;
})
}))
}
<Icon
onPress={()=>onLikePost(i)}
...
/>
...
onLikePost = (i) => {
let posts = this.state.posts;
posts[i].likesCount = !posts[i].isLiked ? posts[i].likesCount + 1 : posts[i].likesCount - 1;
posts[i].isLiked = !posts[i].isLiked;
this.setState({ posts: posts})
}