私の現在の理解は、コンポーネントが見える必要があるとき、またはルートがそのコンポーネントを必要とするときにDOMにマウントすることです。子コンポーネントもレンダリングされます。これは、そのコンポーネントを持たないルートにアクセスしたとき、またはそのコンポーネントが生成する要素を表示していないページを訪れるたびに、コンポーネントがアンマウントされることを意味しますか?したがって、コンポーネントがDOMに表示されるたびに(プロップや状態の変更の外に)、コンポーネントを再マウントする必要がありますか?コンポーネントはいつアンマウントされますか?
答えて
ルータコンポーネントを含む別のコンポーネントを介して使用されている場合に限り、コンポーネントをDOMにマウントするとします。 Reactのルーターを特別な要素/ものとは考えないでください。これらは他のコンポーネントと似ており、現在のURLと、ルータのrender()
機能を使ってどのコンポーネントをレンダリングするかを決定するパターンとのマッチングを行います。 URLが変更されるたびに、ルータはレンダリングする新しいコンポーネントを選択し、render()
機能によってレンダリングします。
コンポーネントをレンダリングする必要がある場合は、DOMにマウントする必要があります。
マウントされていない場合は、マウントする前にマウントする必要があります。コンポーネントが存在していたが、もはや、コンポーネントがアンマウントとみなされていないだろうと(componentWillUnmount
経由)をクリーンアップする機会を与えられている場合VirtualDOM和解中に
。
逆にコンポーネントが存在しなかった場合は、調整中に、真実であるが、今のコンポーネントが実装する準備が考えられ、そして自分自身を準備をする機会が与えられている、い(constructor
/componentWillMount
)
ツリーを破棄すると、古いDOMノードが破棄されます。コンポーネント インスタンスは、componentWillUnmount()を受け取ります。新しいツリーを構築するときには、DOMに新しいDOMノードが挿入されます( )。コンポーネントのインスタンスは、 componentWillMount()、次にcomponentDidMount()を受け取ります。古いツリーに関連付けられているすべての状態 が失われます。お持ちでない場合は、特定のページを読むだけの価値であることを
https://facebook.github.io/react/docs/reconciliation.html
。また、繰り返し要素にはなぜkey
が非常に重要であるかが説明されています。
私はルータがそれ自身の 'render()'関数を持っていることを意味し、現在のURLとどのパターンが一致しているかに基づいて関連するコンポーネントを使用します。この実装のようなものhttps://github.com/ReactTraining/react-router/blob/master/modules/Router.js#L126 –