ホームページ >ウェブフロントエンド >フロントエンドQ&A >React でサブコンポーネントがレンダリングされないようにする方法
子コンポーネントのレンダリングを防ぐ React メソッド: 1. " shouldComponentUpdate(nextProps,nextState){...}" を使用して親コンポーネントのレンダリングを実現し、子コンポーネントはレンダリングしないようにします。 2. "PureComponent" を使用して子コンポーネントのレンダリングを防止します。コンポーネントはレンダリングされません。 3. メモを導入し、フックをメモで囲みます。
このチュートリアルの動作環境: 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 'react'; //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 'react'; //用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 サイトの他の関連記事を参照してください。