@ wei、@ Breakpoint25、および@PaulusLimmaの回答に基づいて、のこの置換コンポーネントを作成しました<Route>
。これにより、URLが変更されたときにページが再マウントされ、ページ内のすべてのコンポーネントが再レンダリングされるだけでなく、作成およびマウントが強制されます。すべてのcomponentDidMount()
他のすべてのスタートアップフックは、URLの変更にも実行されます。
アイデアはkey
、URLが変更されたときにコンポーネントのプロパティを変更することであり、これによりReactはコンポーネントを再マウントする必要があります。
<Route>
たとえば、次のように、のドロップイン置換として使用できます。
<Router>
<Switch>
<RemountingRoute path="/item/:id" exact={true} component={ItemPage} />
<RemountingRoute path="/stuff/:id" exact={true} component={StuffPage} />
</Switch>
</Router>
<RemountingRoute>
コンポーネントは、このように定義されています。
export const RemountingRoute = (props) => {
const {component, ...other} = props
const Component = component
return (
<Route {...other} render={p => <Component key={p.location.pathname + p.location.search}
history={p.history}
location={p.location}
match={p.match} />}
/>)
}
RemountingRoute.propsType = {
component: PropTypes.object.isRequired
}
これは、React-Router 4.3でテストされています。