如果你有一个数组作为状态的一部分,并且该数组包含对象,那么通过更改其中一个对象来更新状态的简单方法是什么?

示例,根据关于react的教程修改:

var CommentBox = React.createClass({
  getInitialState: function() {
    return {data: [
      { id: 1, author: "john", text: "foo" },
      { id: 2, author: "bob", text: "bar" }
    ]};
  },
  handleCommentEdit: function(id, text) {
    var existingComment = this.state.data.filter({ function(c) { c.id == id; }).first();
    var updatedComments = ??; // not sure how to do this  

    this.setState({data: updatedComments});
  }
}

推荐答案

在更新状态时,关键部分是将其视为不可变的.如果你能保证,任何解决方案都可以.

以下是我使用immutability-helper的解决方案:

jsFiddle:

  var update = require('immutability-helper');

  handleCommentEdit: function(id, text) {
    var data = this.state.data;
    var commentIndex = data.findIndex(function(c) { 
        return c.id == id; 
    });

    var updatedComment = update(data[commentIndex], {text: {$set: text}}); 
    
    var newData = update(data, {
        $splice: [[commentIndex, 1, updatedComment]]
    });
    this.setState({data: newData});
  },

以下关于状态数组的问题也可能有所帮助:

Reactjs相关问答推荐

当我在React中使用类方法更新模型的状态时,它在严格模式下触发两次

NextJs Form不允许我输入任何输入,

无法在jest中发布行动

Reaction Native:在初始获取后,Reducer变为未定义

try 在Dockerfile中使用AWS CLI将React构建工件上传到S3时出错

如何在NextJS中仅在刷新页面和页面淡出页面过渡时添加全屏加载器

在Reaction中导入';图片&文件夹时出错

如何使ionic 面包屑在州政府条件下可点击?

如何使用TouchStart/TouchEnd在Table ReactJS中交换位置?

如何在MUI x图表条形图上放置圆角?

更改点几何体的坐标会将其隐藏

useRef()的钩子调用无效

生产部署:控制台中 Firebase 无效 api 密钥错误

React Wordpress Apache 在索引之外重新加载 -> 未找到页面

Chakra UI:如何在选中状态下设置复选框 colored颜色

在 React 中将 MUI 样式外包到单独的文件中?

React对象值下降2次而不是1次

React Native Realm 应用程序在发布构建后崩溃

如何在 JSX 中使用 -webkit- 前缀?

单击按钮时获取react 表中每一行的属性