要将您的输入与您的状态数组动态同步,您可以使用linkState
从react-catalyst包中调用的东西。使用 npm 安装后,您可以通过以下方式使用它:
//need to import
import Catalyst from 'react-catalyst';
ElementsClass = React.createClass({
// mixin the linkedstate component
mixins : [Catalyst.LinkedStateMixin],
getInitialState: function() {
return {
elements: []
}
},
addElement: function() {
var element = {
name: ""
};
//add to elements array
this.state.elements.push(element);
//let react know to rerender necessary parts
this.setState({
elements : this.state.elements
});
},
render() {
return (
{this.state.elements.map(function (element, i) {
//use the linkState method
return <input valueLink={this.linkState('elements.'+i+'.name')} />
}
)}
)
}
我们需要这个react-catalyst
包的原因是,在你的情况下,原生 ReactvalueLink
只会链接顶级状态项elements
。显然,这并不是特别有用,但值得庆幸的是,这是一个相当容易解决的问题。
注意:对于像元素输入这样的迭代项目,您需要提供一个唯一的键。类似于以下内容(可能需要修改为更具体):
{this.state.elements.map(function (element, i) {
//use the linkState method
return <input valueLink={this.linkState('elements.'+i+'.name')} key={'elinput' + i} />
}
)}
这对您的应用程序没有任何外部影响,主要是为了帮助在内部对目标元素做出反应。