2016-12-08 12 views
2

私はこのようなネストされたルートを持っている:react-router:ネストされたルートコンポーネントは、親ルートコンポーネントの前にマウントされますか?

<Route path="modules" component={Modules}> 
    <Route path=":moduleId" component={Module}/> 
</Route> 

を私はモジュールモジュールマウントする前にマウントされていることに気づきました。これはネストされたルートの意図された機能ですか?モジュールで何らかのデータ収集が行われているので、モジュールを意図してレンダリングする必要があるため、私は尋ねます。

モジュールがマウントされる前にレンダリングされていることがわかったら、どうすれば可能ですか?

+0

はい、このようになります。 –

答えて

3

react-routerに特定されていません。反応の中でComponentライフサイクル:

  • 子供は両親の前にマウントされています。 componentWillMountが子ども優先です。

  • 親は子供の前にアンマウントされています。 componentWillUnmountがparent-firstを実行します。

あなたが何かを構築している場合は、最初に完全なものを得るまで、小さな部品を大きな部品に取り付けます。あなたが解体している場合は、最初に大きい方の部分を取り除いてから、その部分に戻ってくるまでそれぞれの部分を解体してください。

+0

親 'comonentWillMount'は子' componentWillMount'の前に呼び出されます。子の 'componentDidMount'メソッドは親の前に呼び出されます。 –

+0

子要素のcomponentWillMountの前にcomponentWillMountが呼び出されているという事実は、親のデータフェッチを非常に魅力的にしています(子のデータをフェッチしています)。だから、なぜこのすべてが私を混乱させていたのかを知ることができれば幸いです基本的には、このネストされたルートの前に、私のコンポーネントは、すべてのデータを親_Module_コンポーネントにフェッチしてから子_Modules_に渡しました。しかし、共有可能なURLを実装したいので、これらの子コンポーネントをrouteParamで駆動する必要があります。 –

2

react-routerは表示されません実際にはは子供をレンダリングするためにライフサイクルプロセスを使用しています。

代わりに、react-routerは、個々に各コンポーネントを個別にレンダリングし、それらを一緒にマージします。このため、子ルートを持つコンポーネントルートにthis.props.childrenを含める必要があります。これを担当するコードは<RouterContext>のレンダリング機能で見ることができます。

基本的には、最もネストされたルートコンポーネントを取り込んでレンダリングすることです。次に、次にネストしたコンポーネントを取り出し、レンダリングしたコンポーネントをchildren propとしてレンダリングします。これはルートルートコンポーネントに到達するまで行を続けます。

ルートを考える:

<Route path="/" component={App}> 
    <Route path="inbox" component={Inbox}> 
    <Route path="messages/:id" component={Message} /> 
    </Route> 
</Route> 

あなたが/inbox/messages/12にアクセスすると、react-routerは、次の操作を行います:

  1. elementとして<Message routeParams={{ id: 12 }} />や店舗、結果をレンダリングします。
  2. レンダリング<Inbox children={element} />と結果をelementとして保存します。
  3. レンダリング<App children={element} />と返品結果。
関連する問題