【发布时间】:2015-06-23 17:23:15
【问题描述】:
我有一个输入组件,它获取 url 作为输入并解析它(resolve=以某种方式获取该 url 的预览):
var resolver = require('resolver');
var UrlResolver = React.createClass({
statics: {
storeListeners: {
onResolverStore: [ ResolverStore ]
}
},
getInitialState: function() {
return { value: '', resolves: [] };
},
onResolverStore: function(data) {
var resolves = [].concat(this.state.resolves, data);
this.setState({ resolves: resolves });
},
handleChange: function(event) {
var value = event.target.value;
this.setState({ value: value });
this.executeAction(resolver, value);
},
render: function () {
return (
<input value={ this.state.value } onChange={ this.handleChange } />
{
this.state.resolves.map(function(data) {
return <ResolveView data={ data } />;
});
}
);
}
});
如您所见,UrlResolver 等待 ResolverStore 上的更改。当输入发生变化时,可能会发生这种变化。 我的问题是当我有 10 个 UrlResolvers 时。在这种情况下,对一个输入的任何更改都会更改 ResolverStore,这将触发 10 个不同的事件,因此 10 个不同的 setStates 将导致 10 次重新渲染。所有这一切,而只有一个输入应处理此更改。这样 9 个组件也会添加一个不属于它们的解析数据。
这种需求有什么解决方案?
【问题讨论】:
标签: javascript reactjs reactjs-flux flux fluxible