Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs react-native中的增量值_Reactjs_React Native - Fatal编程技术网

Reactjs react-native中的增量值

Reactjs react-native中的增量值,reactjs,react-native,Reactjs,React Native,我从一个有效载荷中获取数据,每个帖子上都有一个喜欢的总数。在用户屏幕上,有一个图标让用户喜欢一篇文章,我想实现的是,当用户点击它时,显示的值将增加到该特定文章的+1 视图: 您正在状态变量中存储POST数据,因此请使用setState对其进行更新。使用map检查每篇文章,只要id(每篇文章的唯一属性)与单击项目的id匹配,增加其likeCount,否则返回相同的数据 这样写: onLikePost = (item) => { this.setState(prevState =>

我从一个有效载荷中获取数据,每个帖子上都有一个喜欢的总数。在用户屏幕上,有一个图标让用户喜欢一篇文章,我想实现的是,当用户点击它时,显示的值将增加到该特定文章的+1

视图:


您正在状态变量中存储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)
  }))
}
更新:在更新计数值之前进行检查,并同时更改isLiked
bool

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}) 
}