React file input component for complete control over styling and abstraction from file reading.
- as (React.PropTypes.string): what format the FileReader should read the
file as (i.e.,
buffer,binary,url,text). Defaults tourl. - children (React.PropTypes.any): if children is passed into
FileReaderInput, then the component will hide the native file input and
instead display
children. Whenever the customchildrenare clicked, the component will trigger the native file input prompt. This allows complete control over styling an display. - onChange (React.PropTypes.func): callback
function(event, results). Results will be an array of arrays, the size of which depending on how many files were selected. Each result will be an array of two items:- progressEvent:
result[0]is a ProgressEvent object. You can retrieve the raw results atprogressEvent.target.resultamong other things. - file:
result[1]is a File object. You can retrieve the file name atfile.nameamong other things.
- progressEvent:
All other props on FileReaderInput will be passed down to the native file
input.
import React from 'react';
import FileReaderInput from 'react-file-reader-input';
class MyComponent extends React.Component {
handleChange = (e, results) => {
results.forEach(result => {
const [e, file] = result;
this.props.dispatch(uploadFile(e.target.result));
console.log(`Successfully uploaded ${file.name}!`);
});
}
render() {
return (
<form>
<label htmlFor="my-file-input">Upload a File:</label>
<FileReaderInput as="binary" id="my-file-input"
onChange={this.handleChange}>
<button>Select a file!</button>
</FileReaderInput>
</form>
);
}
}