問題リアクト:は、ルータが再レンダリング同じコンポーネント
それからのparam movie
を取得する非同期ルートを持っており、Movie Container
(コンポーネント)を返します。問題は私が1つのMovieContainer
から別のMovieContainer
(同じ経路ですが、diff。paramsを使って)に行くときです。私のルータはアンマウントし、MovieContainer
コンポーネントを再レンダリングします。しかし、それはちょうど新しい小道具を渡す必要があり、私のコンポーネントのライフサイクルに触れないでください。どのようにそれを解決するには?私は間違っている?
コード:
ルータ
<Route path="/" component={AppLayout}>
<IndexRoute components={{ children: Home }} />
<Route path=":movie/about" getComponents={(nextState, callback) => {
window.scrollTo(0, 0);
const movie = findMovie(nextState.params.movie);
return callback(null, { children: (router) => <Movie movie={movie} router={router} /> });
}}/>
....
</Route>
作品のコンポーネントにおけるコンポーネントWillMount
componentWillMount() {
console.log('MOUNT MovieContainer');
}
UPDATE: OK、いくつかの実験を完了。
は
return callback(null, Movie);
ANDD Movie component
ない再renderdで
return callback(null, { children: (router) => <Movie movie={movie} router={router} /> });
を交換してください。ただ更新されました。それは素晴らしい!しかし、今小道具を渡す方法は?
で映画を見つけるよりも、
とコンポーネントで、私は
this.props.params.movie
経由小道具にアクセスすることができますこれは正しいし、所望の動作です。新しいルートはすべてのコンポーネントを再マウントする必要があります。 –@AndyRayしかし、それは新しいルートではなく、 '/ movie1/about'から'/movie2/about'へ このルートパターン '/:someparams'は新しいコンポーネントを同じコンポーネントに渡すためにのみ作成されます。それで、なぜ再レンダリングすべきですか? –
これは絶対に新しいルートです。 –