は、私はこれがあります。React JSX:親コンポーネントの再レンダリングが子コンポーネントを再マウントするのは正常ですか?私のアプリに反応のルートコンポーネントで
class App extends Component {
...
ComponentDidMount() {
window.addEventListener('resize', this.handleResize, false);
}
handleResize{
this.parentSize = {height: window.innerWidht - this.node.offsetLeft ..., width: ...};
this.forceUpdate();
}
render() {
<div ref="e=>this.node=e}>
<ChildComponent parentSize={this.ParentSize} />
</div>
}
}
を、そうcomponentWillUnmount(I)は、どちらかSETSTATEまたはforceUpdate(を通じて、アプリケーション・コンポーネントの再描画時に気づい、子コンポーネントは、実際に再マウントされますcomponentWillMount、componentDidMountは更新ごとに呼び出されます)。私が期待している動作は、子コンポーネントのレンダー機能だけが再び呼び出されるということです。私は最近、React-router 4.xにアップグレードしたので、これに関連するかどうかはわかりません。
これは設計上のものかどうかわかりますか?私のcomponentDidMountを複数回呼び出すと、データをフェッチしようとするときにいくつかの問題が発生し、リサイズ中にその高価な操作を何度もやりたくないのです。
UPDATE:
私は、この問題の可能性の高い原因を発見しました。複数のコンポーネントがネストされていますが、プロジェクト全体を投稿するのは難しいので、問題の原因となっている実際のコードを投稿することが難しい場合があります。しかし、私はこれがそれだと思う:
ここreturn (
<div className="app-view" style={style} ref={el=>this.node=el}>
<Switch>
<Route exact path='/' component={() => <Home store={store} />} />
<Route path='*' component={Error404} />
</Switch>
</div>
);
私はルート内のコンポーネントに小道具を渡すためにしようとしています(リアクト-ルータ4.xを) 私はホーム・ページを作成する機能を提供することにより、これを行う、どのおそらくすべてのレンダリングでホームページを再作成しています。
ですから、ルート内のすべてのレンダリングでページの再作成なしで小道具を渡すにはどうすればよいですか?
ChildComponentコードを追加できますか?ナビゲートしない限り、componentDidMountを何度も呼び出さないでください。 – Dev
おそらく、子は、再レンダリングをスローする更新された小道具または状態のセットを受け取っています。子コンポーネントを共有してください。 –
更新された参照:()=>ルート内のは私が思う問題を引き起こしています。 子コンポーネントコードは、問題をデバッグするためにライフサイクルメソッドをコンソールに記録するだけのダミーに置き換えられました。だから問題は親コンポーネントにあり、私はそれが私の質問の更新されたセクションにあると信じています。 –