伙计们,我正在开发react js
我已经创建了一个输入文本和模糊的输入按钮,我正在调用一个方法和更新状态变量
但是如果我使用on blur而不是onChange那么输入文本就变成了只读字段
<!DOCTYPE html>
<html>
<head>
<script data-require="react@*" data-semver="0.13.3" src="http://cdnjs.cloudflare.com/ajax/libs/react/0.13.3/react.js"></script>
<script data-require="react-jsx@*" data-semver="0.13.1" src="http://cdnjs.cloudflare.com/ajax/libs/react/0.13.1/JSXTransformer.js"></script>
<link rel="stylesheet" href="style.css" />
<script type="text/jsx">
var App = React.createClass({
getInitialState: function () {
return {value: 'Hello!'};
},
changeTo: function (e) {
this.setState({value: e.target.value});
},
render: function () {
return (
<div>{this.state.value}
<input type="text" defaultValue={this.state.value || ''}
value={this.state.value} onBlur={(e) => this.changeTo(e)} />
</div>
);
}
});
React.render(
<App />,
document.getElementById('app')
);
</script>
</head>
<body>
<div id="app"></div>
</body>
</html>
您需要添加onChange侦听器,否则将无法工作
原因:当你指定value={this.state.}时。Value}意味着你将输入文本值绑定到变量值,react接管了更新输入框中的值的控制。通过添加onChange监听器,你告诉react调用组件函数来更新值,这基本上更新组件的状态,迫使它调用渲染函数并更新输入文本中的值。
changeTo: function (e) {
this.setState({value: e.target.value});
},
updateValue: function (e) {
this.setState({value: e.target.value});
},
render: function () {
return (
<div>{this.state.value}
<input type="text" defaultValue={this.state.value || ''} value={this.state.value}
onBlur={(e) => this.changeTo(e)} onChange={(e) => this.updateValue(e}/>
</div>
);
}