添加到数组时“传播不可迭代实例的无效尝试”

Posted

技术标签:

【中文标题】添加到数组时“传播不可迭代实例的无效尝试”【英文标题】:“Invalid attempt to spread non-iterable instance” When Adding to Array 【发布时间】:2020-06-30 14:00:28 【问题描述】:

在我的应用程序中,我正在动态添加组件,这是有效的。我现在尝试实现额外的数组来存储这些组件的字段。但是,当我尝试添加它们时,我得到了错误:

TypeError: Invalid attempt to spread non-iterable instance

我在数组上方添加了以下代码行,其中索引被添加到每个组件的数组中。

this.setState( disabled: true, arr1: [ ...this.state.arr1, "Test" ] );

我声明数组如下:

arr1: []

【问题讨论】:

需要更多上下文。最初的state 对象是什么? @Nick 不确定我刚刚添加的编辑是否是您的意思,但我已经进行了更改。 谢谢!您能否显示您实际创建初始 this.state 值的代码? 【参考方案1】:

arr1 可能处于未初始化状态,这意味着您正在尝试传播可能未定义的值。

如果你在别处设置你的状态(我想你这样做了),你不能确定它是否被正确初始化(见lifecycles on docs)。

在您的组件内部,使用类属性或在构造函数中初始化状态:

class Thing extends Component 
    //Class property
    state = 
      arr1: []
    
    //Or in constructor
    constructor(props) 
       super(props);

       this.state = 
         arr1: []
       
    

    ...

【讨论】:

所以我在“this.state”中声明“arr1”: @LondonMassive 在这个例子中,是的。选择方法之一,类属性或构造函数内部。【参考方案2】:

this.state.arr1 的初始值似乎是未定义的,因为它可能在初始化状态时未定义。

如果您希望在您的状态中动态添加 arr1 键,您可以尝试以下操作:

const oldArr1 = this.state.arr1 || [];
this.setState(disabled: true, arr1: [...oldArr1, "Test"]);

希望对你有帮助

【讨论】:

以上是关于添加到数组时“传播不可迭代实例的无效尝试”的主要内容,如果未能解决你的问题,请参考以下文章

我的应用程序运行良好,但现在显示错误 [未处理的承诺拒绝:TypeError:传播不可迭代实例的无效尝试

使用对流层形成云,如何将“发射时传播”添加到标签

JavaScript - 如何合并/附加到对象/数组 - ReactJS - 传播语法

如何传播python数组[重复]

使用传播将数组映射到对象

是否可以在 TypeScript 中传播独特的泛型类型?