我想先上传多张图片,然后预览然后提交以发送出去。我遇到了这个:TypeError: Cannot read property 'files' of null。它还只允许我上传一张图像。
TypeError: Cannot read property 'files' of null
files: []
files: File[] = file
file does not exist on type {}
import * as React from "react" class ImageUpload extends React.Component { state: { files: [] } fileSelectedHandler = (file: any) => { let addedFiles = this.state.files.concat(file) this.setState({ files: addedFiles }) console.log("upload file " + file.name) } render() { return ( < form > <div> <h2>Upload images</h2> </div> <h3>Images</h3> <input type="file" onChange={this.fileSelectedHandler} /> </form> ) } } export default ImageUpload
我希望它可以让我选择多个图像并将它们存储在数组中,然后再批量发送。这是正确的方法吗?任何反馈,不胜感激。
为了纠正错误,TypeError: Cannot read property 'files' of null.您需要更改state声明
TypeError: Cannot read property 'files' of null.
state
state = { files: [] }
如果您希望有机会选择多个文件,可以使用multiple选项
multiple
或者,如果您想要一张一张地选择图片,则您的实现应该可以正常工作,只需修正state声明并用于e.target.files获取选定的文件
e.target.files
class ImageUpload extends React.Component { state = { files: [] } fileSelectedHandler = (e) => { this.setState({ files: [...this.state.files, ...e.target.files] }) } render() { return ( <form> <div><h2>Upload images</h2></div> <h3>Images</h3> <input type="file" multiple onChange={this.fileSelectedHandler} /> </form> ) } } ReactDOM.render(<ImageUpload />, document.getElementById('app')) <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script> <div id="app"></div>