我在我最新的应用程序中使用 react-router 和 redux,我面临一些与基于当前 url 参数和查询所需的状态更改相关的问题。
基本上我有一个组件需要在每次 url 更改时更新它的状态。状态由 redux 和装饰器通过 props 传入,就像这样
@connect(state => ({
campaigngroups: state.jobresults.campaigngroups,
error: state.jobresults.error,
loading: state.jobresults.loading
}))
目前我正在使用 componentWillReceiveProps 生命周期方法来响应来自 react-router 的 url 更改,因为当 this.props.params 和 this.props.query 中的 url 发生更改时,react-router 会将新的props传递给处理程序 -这种方法的主要问题是我在这个方法中触发一个动作来更新状态 - 然后传递新的 props 将再次触发相同的生命周期方法的组件 - 所以基本上创建了一个无限循环,目前我正在设置一个状态变量来阻止这种情况发生。
componentWillReceiveProps(nextProps) {
if (this.state.shouldupdate) {
let { slug } = nextProps.params;
let { citizenships, discipline, workright, location } = nextProps.query;
const params = { slug, discipline, workright, location };
let filters = this._getFilters(params);
// set the state accroding to the filters in the url
this._setState(params);
// trigger the action to refill the stores
this.actions.loadCampaignGroups(filters);
}
}
是否有一种标准方法可以根据路由转换触发操作,或者我可以将商店的状态直接连接到组件的状态,而不是通过 props 传递它吗?我曾尝试使用 willTransitionTo 静态方法,但我无权访问那里的 this.props.dispatch。