【发布时间】:2014-07-14 00:44:33
【问题描述】:
我是 React.JS 的新手,并试图理解以下内容。假设我有两个组件:两个 HTML 文本输入;我想要实现的是:当用户更改第一个文本字段中的文本时 - 更改同时出现在第二个文本字段中;反之亦然 - 当用户更改第二个文本字段中的文本时 - 更改也会出现在第一个文本中。以反应的方式做这件事的正确方法是什么? onChange 处理程序中应该写什么?
【问题讨论】:
标签: javascript html reactjs
我是 React.JS 的新手,并试图理解以下内容。假设我有两个组件:两个 HTML 文本输入;我想要实现的是:当用户更改第一个文本字段中的文本时 - 更改同时出现在第二个文本字段中;反之亦然 - 当用户更改第二个文本字段中的文本时 - 更改也会出现在第一个文本中。以反应的方式做这件事的正确方法是什么? onChange 处理程序中应该写什么?
【问题讨论】:
标签: javascript html reactjs
我个人喜欢事件驱动的方法。使用小库(例如 PubSubJS)或使用原生事件滚动您自己的 Pub/Sub 模式很容易。
我在这里写了更多关于后者的内容: http://maketea.co.uk/2014/03/05/building-robust-web-apps-with-react-part-1.html#component-communication
【讨论】:
只要您的两个表单输入都是 (1) controlled inputs 和 (2) 具有指向相同数据的 value 属性,对该数据的任何更改都会更新两个输入。
/** @jsx React.DOM */
var SyncEdit = React.createClass({
getInitialState: function() {
return { text: "" };
},
render: function() {
return (
<div>
<input type="text" value={this.state.text} onChange={this.handleChange} />
<input type="text" value={this.state.text} onChange={this.handleChange} />
</div>
);
},
handleChange: function(evt) {
this.setState({text: evt.target.value});
}
});
React.renderComponent(<SyncEdit />, document.body);
这里是a JSFiddle to demonstrate:http://jsfiddle.net/BinaryMuse/2K5qX/
【讨论】:
PubSubJS 符合要求。