最新のアプリで react-router と redux を使用していますが、現在の URL パラメータとクエリに基づいて必要な状態変更に関連するいくつかの問題に直面しています。
基本的に、URLが変更されるたびに状態を更新する必要があるコンポーネントがあります。状態は、デコレータを使用して redux によって小道具を介して渡されます。
@connect(state => ({
campaigngroups: state.jobresults.campaigngroups,
error: state.jobresults.error,
loading: state.jobresults.loading
}))
現時点では、react-router が this.props.params と this.props.query で URL が変更されたときに新しい props をハンドラーに渡すため、react-router からの URL 変更に応答するために componentWillReceiveProps ライフサイクル メソッドを使用しています。このアプローチの主な問題は、このメソッドでアクションを起動して状態を更新していることです-その後、同じライフサイクルメソッドを再度トリガーするコンポーネントに新しい小道具を渡します-したがって、基本的に無限ループを作成します。現在、私は状態変数を使用して、これが起こらないようにします。
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);
}
}
ルート遷移に基づいてアクションをトリガーする標準的なアプローチはありますか、またはストアの状態を小道具を介して渡すのではなく、コンポーネントの状態に直接接続できますか? willTransitionTo 静的メソッドを使用しようとしましたが、そこにある this.props.dispatch にアクセスできません。