Демонстрация: jsfiddle
/**
* @jsx React.DOM
*/
var NumberField = React.createClass({
render: function() {
return <input type="number" value={this.props.value} onInput={this.onInput}/>;
},
onInput: function(e) {
if (!this.props.onValueChange) {
return;
}
var value = parseInt(e.target.value, 10);
return this.props.onValueChange(value);
}
});
var TempConverter = React.createClass({
getInitialState: function() {
return {c: 0};
},
render: function() {
var c = this.state.c;
return <p>
<NumberField onValueChange={this.onChangeC} value={c}/> C
<br/>
<NumberField onValueChange={this.onChangeF} value={c2f(c)}/> F
</p>;
},
onChangeC: function(c) {
this.setState({c: c});
},
onChangeF: function(f) {
this.setState({c: f2c(f)});
}
});
function c2f(c) {
return 1.8 * c + 32;
}
function f2c(f) {
return 0.5555555555555 * (f - 32);
}
Когда я меняю значение ° F на единицу, оно преобразуется в градусы Цельсия, а затем обратно в градусы Фаренгейта, что приводит к ошибкам округления.
Есть ли способ избежать обновлений в данный момент измененного элемента?