2017-01-03 13 views
1

問題リアクト:は、ルータが再レンダリング同じコンポーネント

それからの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} /> });

を交換してください。ただ更新されました。それは素晴らしい!しかし、今小道具を渡す方法は?

+0

で映画を見つけるよりも、

<Route path=":movie/about" getComponents={(nextState, callback) => { window.scrollTo(0, 0); callback(null, Movie); }} /> 

とコンポーネントで、私はthis.props.params.movie経由小道具にアクセスすることができますこれは正しいし、所望の動作です。新しいルートはすべてのコンポーネントを再マウントする必要があります。 –

+0

@AndyRayしかし、それは新しいルートではなく、 '/ movie1/about'から'/movie2/about'へ このルートパターン '/:someparams'は新しいコンポーネントを同じコンポーネントに渡すためにのみ作成されます。それで、なぜ再レンダリングすべきですか? –

+0

これは絶対に新しいルートです。 –

答えて

0

素晴らしい!最後に解決策が見つかりました。コンストラクタ/ componentWillMount const movie = findMovie(nextState.params.movie);

関連する問題