に再レンダリング私はコードthis.props.childrenない親状態変化
import React, {Component} from 'react';
class App extends Component {
render() {
return (
<Container>
<Child/>
</Container>
)
}
}
class Container extends Component {
render() {
console.log('Container render');
return (
<div onClick={() => this.setState({})}>
{this.props.children}
</div>
)
}
}
class Child extends Component {
render() {
console.log('Child render');
return <h1>Hi</h1>
}
}
export default App;
の部分を持っている「こんにちは」をクリックすると、MSG、唯一Container
コンポーネントを再レンダリングし続けるが、Child
コンポーネントを再ではありません - レンダリングされる。
なぜChild
コンポーネントが再レンダリングされないのですかContainer
状態が変わりましたか?
私はそれが原因それはContainer
コンポーネントのプロパティであることには発生しませんが、それでもthis.props.child
はJSXでChild
コンポーネントに評価され、その確認されていないことを理由でしょう。
<div onClick={() => this.setState({})}>
{this.props.children}
</div>
フル例https://codesandbox.io/s/529lq0rv2n(コンソールログを確認)
ありがとうございました。私が理解しているように、setState()が起動されると、Containerコンポーネントのレンダリング機能が呼び出され、すべての子要素を再レンダリングする必要があります。 {this.props.children}の代わりに を使うことができ、更新する小道具がなくても毎回再レンダリングが実行されます。 [Example](https://codesandbox.io/s/6l9vmx5nnw)のチェック –
' 'は 'App'によってレンダリングされます。そのため、' Container 'がレンダリングされたときに再レンダリングされません。あなたの 'Container 'はすべて、渡された値を返します。 'React.cloneElement(this.props.children)'を実行することで再レンダリングをトリガーすることができます –
torvin
私は最初からそう考えていましたが、最初のレンダリングについてどう説明しますか? appが最初にマウントされると、Containerがレンダリングされた後に子がレンダリングされます(コンソールログ参照)。子がアプリケーションでレンダリングされた場合、初期レンダリング中に「レンダリングされたコンテナ」の前に「子レンダリング」が表示されますか?そうではありませんか? –