ホームページ >ウェブフロントエンド >フロントエンドQ&A >React でサブコンポーネントがレンダリングされないようにする方法

React でサブコンポーネントがレンダリングされないようにする方法

藏色散人
藏色散人オリジナル
2023-01-05 09:29:172349ブラウズ

子コンポーネントのレンダリングを防ぐ React メソッド: 1. " shouldComponentUpdate(nextProps,nextState){...}" を使用して親コンポーネントのレンダリングを実現し、子コンポーネントはレンダリングしないようにします。 2. "PureComponent" を使用して子コンポーネントのレンダリングを防止します。コンポーネントはレンダリングされません。 3. メモを導入し、フックをメモで囲みます。

React でサブコンポーネントがレンダリングされないようにする方法

このチュートリアルの動作環境: Windows 10 システム、react18.0.0 バージョン、Dell G3 コンピューター。

反応で子コンポーネントがレンダリングされないようにする方法は?

React の親コンポーネントは再レンダリングされ、子コンポーネントはレンダリングする必要がありません。3 つのパフォーマンス最適化方法 (PureComponent、memo、 shouldComponentUpdate);

//React の通常の関数を使用する場合PureComponent と shouldComponentUpdate

// shouldComponentUpdate

//shouldComponentUpdate
class Foo extends Component {
  shouldComponentUpdate(nextProps,nextState){
    if(nextProps.count===this.props.count){ //传入的count与组件当前props的count比较,count没改变,return false,不渲染
      return false    //不渲染
    }
    return true;  //渲染
  }
  render() {
    console.log("组件渲染");  //可以看到,当父组件的name改变时,子组件不会打印,只有count改变,才会打印,优化性能
    return null
  }
}
 
class App extends Component {
  state = {
    count: 0,
    name: 0
  }
  render() {
    return (
      <Fragment>
        <Foo count={this.state.count} ></Foo>
        <button onClick={() => { this.setState(() => ({ count:this.state.count+1 })) }}>加count</button>
        <button onClick={() => { this.setState(() => ({ name: this.state.count+1 })) }}>加name</button>
      </Fragment>
 
    )
  }
}

//PureComponent

//引入PureComponent
import React, { Component, Fragment, PureComponent} from &#39;react&#39;;
//PureComponent,自动比较组件数据是否改变,注意只能比较一层,比如一个对象,对象中的属性改变,他不会重新渲染,只有对象改变,才重新渲染。
class Foo extends PureComponent {
  render() {
    console.log("组件渲染");
    return null
  }
}
 
class App extends Component {
  state = {
    count: 0,
    name: 0
  }
  render() {
    return (
      <Fragment>
        <Foo count={this.state.count} ></Foo>
        <button onClick={() => { this.setState(() => ({ count:this.state.count+1 })) }}>加count</button>
        <button onClick={() => { this.setState(() => ({ name: this.state.count+1 })) }}>加name</button>
      </Fragment>
 
    )
  }
}

//hooks の 2 つの最適化メソッドを使用できます。 独自の最適化メソッド memo

//引入memo
import React, { Component, Fragment,  memo } from &#39;react&#39;;
//用memo把hooks包裹即可
const Foo = memo(function Foo(props) {
  console.log("组件渲染");
  return <div>count:{props.count}</div>
})
 
class App extends Component {
  state = {
    count: 0,
    name: 0
  }
  render() {
    return (
      <Fragment>
        <Foo count={this.state.count} ></Foo>
        <button onClick={() => { this.setState(() => ({ count:this.state.count+1 })) }}>加count</button>
        <button onClick={() => { this.setState(() => ({ name: this.state.count+1 })) }}>加name</button>
      </Fragment>
 
    )
  }
}

推奨される学習: 「react ビデオ チュートリアル

以上がReact でサブコンポーネントがレンダリングされないようにする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。