【发布时间】:2016-02-02 15:08:54
【问题描述】:
我有一个组件,它在 props 中获取一些数据并使用它们发出 ajax 请求。
var ItemList = React.createClass({
propTypes: {
filters: React.PropTypes.object.isRequired,
},
getInitialState: function() {
return {items: []};
},
componentDidMount: function() {
this.ajaxFetchItems(this.props.filters);
},
componentWillReceiveProps: function(nextProps) {
this.ajaxFetchItems(nextProps.filters);
},
ajaxFetchItems: function(filter) {
....
this.setState({items: data});
}
}
问题是props几乎是立即更改的,有时componentDidMount中的ajax调用比componentWillReceiveProps中的稍慢,所以初始状态是在第一次更新后写入的。
如何避免慢的 componentDidMount 覆盖快的 componentWillReceiveProps?
有更好的方法来处理下载数据的 React 组件的生命周期吗?
【问题讨论】:
-
仅在下一个
filters属性与当前属性不同时获取 -
我尽量避免在应用程序树中包含应用程序逻辑 - 所以在这种情况下,我会将过滤器应用于商店并告诉它重新加载,我的任何组件都会监听对商店的更改并在完成加载后更新。如果您愿意,您只能在 new_filters !== old_filters 时更新商店,这意味着如果 2 个 ajaxFetchItems 快速连续触发,则它是无操作的。或者您可以在存储负载上使用去抖动