反应:避免受控组件样板

时间:2014-11-12 15:43:37

标签: reactjs

所以我只是出于好奇,

任何人都能找到一种聪明的方法来处理受控组件(输入,选择......)中的双向数据绑定,而无需编写以下所有内容:

  getInitialState: function() {
    return {value: 'Hello!'};
  },
  handleChange: function(event) {
    this.setState({value: event.target.value});
  },
  render: function() {
    var value = this.state.value;
    return <input type="text" value={value} onChange={this.handleChange} />;
  } 

2 个答案:

答案 0 :(得分:5)

您可能需要阅读文档中的“双向绑定助手”部分: http://facebook.github.io/react/docs/two-way-binding-helpers.html

LinkedStateMixin

var NoLink = React.createClass({
  getInitialState: function() {
    return {message: 'Hello!'};
  },
  handleChange: function(event) {
    this.setState({message: event.target.value});
  },
  render: function() {
    var message = this.state.message;
    return <input type="text" value={message} onChange={this.handleChange} />;
  }
});


var WithLink = React.createClass({
  mixins: [React.addons.LinkedStateMixin],
  getInitialState: function() {
    return {message: 'Hello!'};
  },
  render: function() {
    return <input type="text" valueLink={this.linkState('message')} />;
  }
});

答案 1 :(得分:5)

一个值得了解的技巧 - 自onChange事件冒出来之后,您可以将表单输入包装在容器中并注册onChange而不是 - <form>是完美的。

然后你可以编写一个通用的onChange处理程序来从事件的target中提取数据 - 你需要在字段中添加一些识别信息,这就是name属性是无论如何。

这里有一个Gist with an example implementation和一个live demo - 形式输入状态显示在表单下方。