arrays - 更新存储数组中对象的属性 - React Native

标签 arrays reactjs object react-native

我正在使用react-native-simple-store并编写了以下函数来更新存储在对象数组中的所提供对象的属性。为此,我使用了issue #31中提到的方法。用于删除项目。

问题是因为我使用的是 .push,所以更新项目会导致它呈现在数组的底部。这会导致项目在 FlatList 中不必要地移动。

是否有更有效的方法来更新数组中对象的属性(使用 .push 不会导致此问题)?

plusProgress = (itemId, progress) => {
  const foods = this.state.foods.filter(({ id }) => itemId !== id);
    const updatedItem = {
      itemId,
      progress: progress + 1
    };
  foods.push(updatedItem);
  this.setState({ foods });
  store.save('foods', foods);
}

最佳答案

创建一个新数组,并将更新后的对象放置在正确的位置,然后使用该新数组调用 setState()。如果当前项目不是您要更新的项目,请务必按原样返回。否则,数组元素将被 null 替换

  plusProgress = (itemId, progress) => {

  const foods = this.state.foods.map(item => {
    if (item.itemId === itemId) {
      return Object.assign({}, item, {progress: progress + 1});
    } 
    return item      
  })

  this.setState({ foods: foods })
}

关于arrays - 更新存储数组中对象的属性 - React Native,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49817714/

相关文章:

php - 从 php 传递的 json 数组获取键 => 值

c# - 二进制搜索字符串数组未找到搜索的字符串 C#

javascript - 如何从变量外部访问 JavaScript 对象

javascript - 从对象数组创建树层次结构

javascript - 根据属性重新排序对象数组

c - 管道和 fork() - 如何通过 C 中的管道编写 int 数组?

javascript - 如何将下一个/图像组件设置为 100% 高度

javascript - 使用 Angular 2.0 或 React 而不改变我们的构建过程?

javascript - 基于数字渲染多个元素而不是通过数组映射

java - 当我们创建多个对象时,静态 block 会发生什么?