I have an array [ 0.00, 1.00, 2.00, 3.00 ]
and 4 input fields to edit each number in the array.
Right now I have an onChange
function for each number. How do I make this code more efficient?
class Form extends React.Component {
constructor(props) {
super(props);
this.state = {
value: [ 0.00, 1.00, 2.00, 3.00 ]
};
}
field0 = (e) => {
this.setState({
'field0' : e.target.value,
},() => {
this.setState({ value:
[
Number(this.state.field0),
Number(this.state.value.map(function(v){ return v.toFixed(2); })[1]),
Number(this.state.value.map(function(v){ return v.toFixed(2); })[2]),
Number(this.state.value.map(function(v){ return v.toFixed(2); })[3]),
]
});
});
}
field1 = (e) => {
this.setState({
'field1' : e.target.value,
},() => {
this.setState({ value:
[
Number(this.state.value.map(function(v){ return v.toFixed(2); })[0]),
Number(this.state.field1),
Number(this.state.value.map(function(v){ return v.toFixed(2); })[2]),
Number(this.state.value.map(function(v){ return v.toFixed(2); })[3]),
]
});
});
}
field2 = (e) => {
this.setState({
'field2' : e.target.value,
},() => {
this.setState({ value:
[
Number(this.state.value.map(function(v){ return v.toFixed(2); })[0]),
Number(this.state.value.map(function(v){ return v.toFixed(2); })[1]),
Number(this.state.field2),
Number(this.state.value.map(function(v){ return v.toFixed(2); })[3]),
]
});
});
}
field3 = (e) => {
this.setState({
'field3' : e.target.value,
},() => {
this.setState({ value:
[
Number(this.state.value.map(function(v){ return v.toFixed(2); })[0]),
Number(this.state.value.map(function(v){ return v.toFixed(2); })[1]),
Number(this.state.value.map(function(v){ return v.toFixed(2); })[2]),
Number(this.state.field3),
]
});
});
}
render() {
return (
<div>
<input name="field0" onChange={this.field0} value={this.state.value.map(function(v){ return v.toFixed(2); })[0]} /><br />
<input name="field1" onChange={this.field1} value={this.state.value.map(function(v){ return v.toFixed(2); })[1]} /><br />
<input name="field2" onChange={this.field2} value={this.state.value.map(function(v){ return v.toFixed(2); })[2]} /><br />
<input name="field3" onChange={this.field3} value={this.state.value.map(function(v){ return v.toFixed(2); })[3]} />
<p>
{this.state.value.map(function(v){ return v.toFixed(2); })[0] + ', ' +
this.state.value.map(function(v){ return v.toFixed(2); })[1] + ', ' +
this.state.value.map(function(v){ return v.toFixed(2); })[2] + ', ' +
this.state.value.map(function(v){ return v.toFixed(2); })[3]}
</p>
</div>
);
}
}
ReactDOM.render(<Form />, document.getElementById('root'));