2016-10-24 7 views
2

ログには、親コンポーネントが再レンダリング中であることが示されます。
しかし、子コンポーネントのrenderメソッドは呼び出されません。React、親のレンダーは子どもを再レンダリングさせますか?

私は子供が次のような論理で元気づけていると思いました。私はそれについて間違っていると思います。 親が再レンダリングされたときにどの子コンポーネントが再レンダリングされるかをどのように判断するか?

  • 親のレンダリング
  • - shouldComponentUpdateがtrueを返す場合、子供は

親が

render() { 

    let { viewConfig } = this.props 
    console.log("ViewConfigSettingBase rendering") 
    return (
     <div> 
     { 
      Object.keys(viewConfig.availableSubviewConfigMap).map((sectionName, index) => { 
      var subviewConfigData = viewConfig.availableSubviewConfigMap[sectionName] 
      return (
       <ViewConfigSettingRow 
       key={sectionName} 
       viewConfigData={subviewConfigData} 
       sectionName={sectionName} 
       parentViewConfig={viewConfig} 
       /> 
      ) 
      }) 
     } 
     </div> 
    ) 
    } 

答えて

3

のように見えるが、再レンダリングを反応させるのレンダリング再表示> - >子供のshouldComponentUpdate

  • 呼び出されます小道具または状態が変更されます。 PureComponentを拡張した場合、子はその小道具が変更されたかどうかをチェックします。 yesの場合 - > shouldComponendUpdateはtrueを返し、そうでない場合はfalseを返します。たぶんこれは事実でしょうか?

    コンポーネントのライフサイクル: https://facebook.github.io/react/docs/react-component.html

    更新を更新は小道具又は状態への変化によって引き起こされることができます。

    componentWillReceiveProps() 
    shouldComponentUpdate() 
    componentWillUpdate() 
    render() 
    componentDidUpdate() 
    

    shouldComponentUpdate()

    利用shouldComponentUpdate()の影響を受けません>コンポーネントの出力があるかどうかを知るに反応できるようにする:これらのメソッドは、コンポーネントが再レンダリングされるときに呼び出されます>です現在の州または小道具の変更によってデフォルトの振る舞いは、すべての状態変更に対して再レンダリングすることです。ほとんどの場合、デフォルトの振る舞いに依存する必要があります。

    shouldComponentUpdate()は、新しいpropsまたは>状態が受信されたときにレンダリングする前に呼び出されます。デフォルトはtrueです。このメソッドは、初期レンダリングまたはforceUpdate()が使用されているときは呼び出されません。

    falseを返すことで、子コンポーネントの状態が変更されたときに子コンポーネントの再レンダリングが妨げられることはありません。

    現在、shouldComponentUpdate()がfalseを返した場合、> componentWillUpdate()、render()、およびcomponentDidUpdate()は呼び出されません。将来、Reactは厳密なディレクティブではなくヒントとしてshouldComponentUpdate()を扱う可能性があり、falseを返すとコンポーネントが再レンダリングされる可能性があることに注意してください。

    プロファイリング後に特定のコンポーネントが遅いと判断した場合は、> shouldComponentUpdate()を実装するReact.PureComponentから継承するように変更することができます。 >あなたが手で書きたいと思っているなら、this.props>をnextPropsと比較し、this.stateをnextStateと比較し、tell> Reactで更新をスキップすることができます。

    あなたはインクルードは、以下のページでプロセスをレンダリング反応に関するいくつかのドキュメントを見つけることができます:私が正しく理解していれば https://facebook.github.io/react/docs/reconciliation.html https://facebook.github.io/react/docs/optimizing-performance.html

  • +0

    だから、 'PureComponent'は浅い前者のみ実装していることにComponent''とは異なっています'shouldComponentUpdate'で等しく、後者は常に' true'を返します。純粋であるかどうかに関わらず、 'SCU'が' false'を返した場合、レンダリングは呼び出されず、子コンポーネントも再レンダリングされず、新しい小道具も受け取られません。しかし、子コンポーネントは、親が再レンダリングしなくても、その「状態」が(人工的に)変更された場合、再レンダリングできます。右? – Qwerty

    関連する問題