【发布时间】:2017-05-19 12:13:03
【问题描述】:
我目前正在使用 react 和 redux 构建我的第一个应用程序。我已经构建了一些过滤器,当用户选择一个过滤器时,它将使用新的过滤器值更新商店,然后请求新的结果。
正在使用新的过滤器值更新存储,但在存储完成更新之前发生了获取请求,因此返回了不正确的值。
如何在发出获取请求之前等待商店更新?
下面是我的代码...
const mapStateToProps = (state) => {
return {
dataFilter: state.dataFilter
}
};
class Filters extends Component {
constructor(props){
super(props);
this.handleChange = this.handleChange.bind(this);
}
handleChange(value, dispatcher){
dispatcher(value.props["data-attr"]);
this.props.resultsFetchData('/api/deals/?data=' + this.props.dataFilter);
}
render() {
const dataFilters = {
0: <span data-attr="0">Any</span>,
20: <span data-attr="1">1GB+</span>,
40: <span data-attr="2">2GB+</span>,
60: <span data-attr="5">5GB+</span>,
80: <span data-attr="10">10GB+</span>,
100: <span data-attr="99.99">Unltd</span>
};
return (
<div className="filters">
<div className="row">
<div className="col-sm-4 filters--slider">
<Slider
min={0}
marks={dataFilters}
step={null}
defaultValue={this.props.dataFilter}
onChange={e => {this.handleChange(dataFilters[e], this.props.setDataFilter)}} />
</div>
</div>
</div>
);
}
}
export default connect(mapStateToProps, {setDataFilter, resultsFetchData})(Filters)
Filters.propTypes = {
dataFilter: PropTypes.string
}
【问题讨论】:
-
您可以在 mapStateToProps 中添加检查:
dataFilter: state && state.dataFilter ? state.dataFilter || anyDefaultValue。或者在handleChange()中,你可以添加一个if语句来检查prop是否有效。 -
或者您可以将 fetch 调用移动到 componentWillReceiveProps 方法中
-
我尝试将 fetch 移动到 componentWillReceiveProps 但它只是不断地进行 API 调用,直到它因连接过多而出错?
标签: javascript reactjs redux