reactjs - 多选文件按钮

标签 reactjs typescript

我想要实现的是只有在第一个文件附加一个文件后,才有另一个选择文件按钮上传另一个文件。

我正在执行以下操作来呈现我的按钮:

<FormControl
   type="file"
   accept=".jpg"
   onChange={this.onImageUpload}
/>

我尝试的是首先创建一个包含一个空值的数组。当调用 onImageUpload 时,我将文件中的值推送到数组中。现在我在数组中有 2 个元素,null 和文件。我尝试遍历数组的长度并呈现许多选择文件上传按钮。问题是我在执行此操作时丢失了按钮旁边的文件名。如何添加新按钮而不丢失前一个按钮的文件名?

After one file upload

Before one file upload

最佳答案

你可以做的是在构造函数中声明一个数组状态,在索引 0 处使用单个 FormControl,如下所示,

constructor(props) {
   this.state = {
      FormControls: [
       <FormControl
         type="file"
         accept=".jpg"
         onChange={this.onImageUpload}
       />
     ]
   }
}

然后像这样在上传图像(触发 onChange)时将另一个插入到数组中,

onImageUpload() {
   let formArray = this.state.FormControls;
   formArray.push(<FormControl
         type="file"
         accept=".jpg"
         onChange={this.onImageUpload}
       />
   );
   this.setState({FormControls: formArray})
}

最后,让顶层父级像这样包含所有输入 (FormControl),

<ParentView>{this.state.FormControls}</ParentView>

此外,不要忘记在将 FormControl 添加到数组时向其添加一个新的且唯一的 ref

关于reactjs - 多选文件按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48322827/

相关文章:

javascript - 在 componentDidMount 中获取数据时出现警告 "Can only update a mounted or mounting component"

reactjs - 如何覆盖自定义 Material UI Accordion 的样式(分隔线和折叠图标)

javascript - 已定义函数,但 MyFunction 不是函数

typescript - 声明通用项目数组时,如何允许推断通用参数?

node.js - JWT: 'string | undefined' 类型的参数不可分配给 'Secret' 类型的参数

javascript - 一组组件在reactjs中挂载后如何执行功能?

javascript - 将 Prop 传递给包装在 withRouter() 函数中的 react 组件

reactjs - 如何更改formcontrollabel 的默认排版类- material-ui | react ?

typescript - 如何在 TypeScript 泛型中动态指定类型?

angularjs - Angular 2 V/S Angular js V/S React js v/s typescript