React 的状态如何通过使用扩展运算符来保存文件?

Posted

技术标签:

【中文标题】React 的状态如何通过使用扩展运算符来保存文件?【英文标题】:How does React's state hold files through use of spread operator? 【发布时间】:2018-06-21 04:38:25 【问题描述】:

我对@9​​87654321@ 的理解是,它会创建对文件对象的引用,但如何声明只保存引用?

  handleChange = (e) => 
    const  onChange  = this.props;
    const files = this.getFileFromInput(e);

    onChange && onChange(e);

    this.setState(() => (
      files: [...files],
    ));
  

【问题讨论】:

state 怎么能只保留引用 你到底是什么意思? this.state 本身只是一个引用 - 它引用一个对象,而该对象又引用其他对象(如文件对象)或原语(如字符串、布尔值、数字等)。 据我了解,如果files是一个包含三个元素的数组,那么...files等价于files[0], files[1], files[2] @ChrisG - 也可以是一个对象 - 我们必须看看 getFileFromInput 返回什么。如果它返回一个数组,那么当您可以执行 files:files 时执行 files:[...files] 会很愚蠢,所以我猜它返回一个对象。 【参考方案1】:

当您将一个数组传播到另一个数组时,它会返回一个新数组,其中包含对旧数组的引用。以这种方式使用的扩展语法旨在替换Object.assign。这适用于对象和数组。这些在功能上是等效的:

[...files]
Object.assign([], files)

【讨论】:

以上是关于React 的状态如何通过使用扩展运算符来保存文件?的主要内容,如果未能解决你的问题,请参考以下文章

无法在 React 中使用扩展运算符更新状态

如何设置状态来更新 React 中的数组?

React 在使用扩展运算符更改状态时渲染,但在传递数组本身时不渲染 [重复]

React/Redux - 使用扩展运算符将对象添加到数组的开头

如何使扩展运算符仅通过非函数属性枚举?

Redux:在二维数组上使用扩展运算符