In my react component I have a file input:
<input type="file" onChange={this.onFileChange.bind(this)} />`
and my onFileChange is:
onFileChange(e) {
let file = e.target.files[0];
this.setState(() => ({ file: e.target.files[0] })); //doesnt work
// this.setState(() => ({ file })); //works
// this.setState({ file: e.target.files[0] }); //works
}
This first way of setting the states fails with an error:
Cannot read property 'files' of null
React also gives the following warning:
This synthetic event is reused for performance reasons. If you're
seeing this, you're accessing the property 'target' on a
released/nullified synthetic event
But the last two ways of setting the state give no errors or warnings. Why is this happening?
let file = e.target.files[0];(line 2), you are creating the variable in a closure of an asynchronous function() => ({ file })(line 4). That is why it work. Note thateis just an argument ofonFileChangeand it is not accessible in that asynchronous function (that is why() => ({ file: e.target.files[0] })does not work)