当前位置: 首页 > 面试题库 >

在ReactJS中更新数组中对象的最佳方法是什么?

司徒高丽
2023-03-14
问题内容

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

示例,从关于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开始,并尝试了其他类似问题的解决方案,但到目前为止还算不上成功。 这是我的工作代码: 但是当我将Numbers Array传递为: 我收到此错误: 警告:遇到两个具有相同密钥的孩子。密钥应该是唯一的,以便组件在更新期间保持其身份。 所以我的问题是:在这种情况下,提供密钥的最佳方法是什么?如果我将数字(如上例所示)用作键,那么避免此警告的最佳解决方案是什么? 谢谢!

  • 问题内容: 我有一个应用程序,它读取带有大量数据行的CSV文件。我根据数据类型为用户提供了行数的摘要,但我想确保不会读取太多的数据行并导致OutOfMemoryErrors。每行转换为一个对象。有没有一种简便的方法以编程方式找出该对象的大小?是否有一个引用定义了一个原始类型和对象引用有多大VM? 现在,我的代码可以读取多达32,000行,但我还想让代码显示尽可能多地读取行,直到使用32 MB内存为

  • 问题内容: 我有一个称为状态的对象数组。 说我有功能 这里的问题是,每次调用时,整个数组都会更新,因此整个DOM都将重新呈现。在我的情况下,这导致浏览器冻结,因为我几乎每秒都要调用此函数,并且有很多对象。但是,在每次通话中,实际上仅更新其中一个或两个设备。 我有什么选择? 编辑 在我的确切情况下,a 是一个定义如下的对象: 因此,数组中的每个项目都是this的特定瞬间,即我所拥有的某个地方: 我更

  • 问题内容: 为一个类获取类文字很容易: 但是,如何获取数组类型的类对象? 这可行,但是很丑陋,可能不是编译时间常数: 我查看了JLS,但唯一发现的是,根据JLS的定义,我所谓的“类文字”不是“文字”。 问题答案: 即使对于数组类型,您仍然可以使用类文字。这样编译就可以了。 JLS的15.8.2节规定: 甲 类文字 是由类,接口,的名称的表达 阵列 ,或原语类型或伪类型,接着是“” 和令牌。 (加粗

  • 这就是状态变量中的内容 我试图做的是调用一个函数来更新一个位置的期望值。例如,我使用的函数如下: 它不起作用。我知道我可以传递一个完全更新的数组,但我需要当前状态的其他值。

  • 问题内容: 我遇到了一个问题,需要成对地遍历数组。最好的方法是什么?或者,作为替代方案,将Array转换为成对的Array(然后可以正常迭代)的最佳方法是什么? 这是我得到的最好的。它必须是,而且不是很漂亮。有没有更好的办法? 问题答案: 您可以 映射 跨步而不是对其进行迭代,从而可以将结果作为 常量获取: 如果只需要遍历对,并且给定的数组很大,那么避免创建带有延迟映射的中间数组可能是有利的: