欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

React避免不必要的重新渲染的方法示例

 更新時(shí)間:2024年10月11日 09:38:17   作者:liangshanbo1215  
構(gòu)建高性能?React?應(yīng)用程序的關(guān)鍵之一是避免不必要的重新渲染,React?的渲染引擎是高效的,但防止在不需要的地方重新渲染仍然至關(guān)重要,在這篇文章中,我們將介紹常見(jiàn)錯(cuò)誤以及如何避免它們,需要的朋友可以參考下

1. 使用 React.memo 緩存組件

React.memo 幫助你在組件的 props 沒(méi)有改變時(shí)跳過(guò)重新渲染。但是,如果不實(shí)現(xiàn)自定義比較函數(shù),很容易濫用 React.memo

不正確的用法:

const MemoizedComponent = React.memo(MyComponent);

這只檢查 props 引用是否發(fā)生了變化,這可能并不總是足夠的。

正確用法:

const MemoizedComponent = React.memo(MyComponent, (prevProps, nextProps) => {
  return prevProps.itemId === nextProps.itemId;
});

在這里,我們使用了一個(gè)自定義的比較函數(shù),它只在 itemId prop 發(fā)生變化時(shí)觸發(fā)重新渲染。

2. 避免過(guò)度使用內(nèi)聯(lián)函數(shù)

在 JSX 中使用內(nèi)聯(lián)函數(shù)可能會(huì)導(dǎo)致不必要的重新渲染,因?yàn)?React 在每次渲染時(shí)都會(huì)將新函數(shù)視為新 prop。

不正確的用法:

function ButtonComponent() {
  return <button onClick={() => handleClick()}>Click me</button>;
}

這會(huì)導(dǎo)致在每次渲染時(shí)重新創(chuàng)建 handleClick,從而導(dǎo)致不必要的重新渲染。

正確用法:

import { useCallback } from 'react';
 
function ButtonComponent() {
  const handleClick = useCallback(() => {
    // Handle click logic
  }, []);
 
  return <button onClick={handleClick}>Click me</button>;
}

通過(guò)使用 useCallback,我們記住了 handleClick 函數(shù),防止了每次渲染時(shí)不必要的重新創(chuàng)建。

3. 利用 PureComponent

當(dāng)使用類(lèi)組件時(shí),使用 React.PureComponent 可以確保組件僅在其 props 或 state 發(fā)生變化時(shí)重新渲染。如果你使用的是 React.Component,可能會(huì)導(dǎo)致不必要的重新渲染。

不正確的用法:

class CardComponent extends React.Component {
  // Component logic
}

正確用法:

class CardComponent extends React.PureComponent {
  // Component logic
}

通過(guò)擴(kuò)展 React.PureComponent 將淺層比較 props 和 state,避免不必要的重新渲染。

4. 優(yōu)化功能組件中的 useSelector

當(dāng)從 react-redux 使用 useSelector 時(shí),只選擇必要的 state 切片很重要。

不正確的用法:

import { useSelector } from 'react-redux';
 
const DataComponent = () => {
  const globalState = useSelector((state) => state);
  // Render logic
};

這將導(dǎo)致組件在狀態(tài)的任何部分發(fā)生變化時(shí)重新渲染。

正確用法:

import { useSelector } from 'react-redux';
 
const DataComponent = () => {
  const selectedData = useSelector((state) => state.specificSlice);
  // Render logic based on specific slice
};

通過(guò)僅選擇狀態(tài)的必要部分,可以最大限度地減少重新渲染。

5. 在類(lèi)組件中實(shí)現(xiàn) shouldComponentUpdate

對(duì)于不擴(kuò)展 PureComponent 的類(lèi)組件,手動(dòng)實(shí)現(xiàn) shouldComponentUpdate 可以更精細(xì)地控制組件何時(shí)重新渲染。

不正確的用法:

class ListItem extends React.Component {
  // Component logic
}

這將在每次父組件渲染時(shí)重新渲染,即使 props 和 state 沒(méi)有改變。

正確用法:

class ListItem extends React.Component {
  shouldComponentUpdate(nextProps, nextState) {
    return this.props.itemId !== nextProps.itemId || this.state.value !== nextState.value;
  }
 
  // Component logic
}

通過(guò)自定義 shouldComponentUpdate,我們確保組件僅在 itemId prop 或 value 狀態(tài)發(fā)生變化時(shí)重新渲染。

以上就是React避免重新渲染的方法示例的詳細(xì)內(nèi)容,更多關(guān)于React避免重新渲染的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 在React框架中實(shí)現(xiàn)一些AngularJS中ng指令的例子

    在React框架中實(shí)現(xiàn)一些AngularJS中ng指令的例子

    這篇文章主要介紹了在JavaScript的React框架中實(shí)現(xiàn)一些AngularJS指令的例子,React使用Virtual DOM因而與普通的js框架有些不同,需要的朋友可以參考下
    2016-03-03
  • 使用React Native創(chuàng)建以太坊錢(qián)包實(shí)現(xiàn)轉(zhuǎn)賬等功能

    使用React Native創(chuàng)建以太坊錢(qián)包實(shí)現(xiàn)轉(zhuǎn)賬等功能

    這篇文章主要介紹了使用React Native創(chuàng)建以太坊錢(qián)包,實(shí)現(xiàn)轉(zhuǎn)賬等功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • react component changing uncontrolled input報(bào)錯(cuò)解決

    react component changing uncontrolled in

    這篇文章主要為大家介紹了react component changing uncontrolled input報(bào)錯(cuò)解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 簡(jiǎn)單分析React中的EffectList

    簡(jiǎn)單分析React中的EffectList

    這篇文章主要簡(jiǎn)單分析了React中的EffectList,幫助大家更好的理解和學(xué)習(xí)使用React進(jìn)行前端開(kāi)發(fā),感興趣的朋友可以了解下
    2021-04-04
  • React Native模塊之Permissions權(quán)限申請(qǐng)的實(shí)例相機(jī)

    React Native模塊之Permissions權(quán)限申請(qǐng)的實(shí)例相機(jī)

    這篇文章主要介紹了React Native模塊之Permissions權(quán)限申請(qǐng)的實(shí)例相機(jī)的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • mobx在react hooks中的應(yīng)用方式

    mobx在react hooks中的應(yīng)用方式

    這篇文章主要介紹了mobx在react hooks中的應(yīng)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 使用 React hooks 實(shí)現(xiàn)類(lèi)所有生命周期

    使用 React hooks 實(shí)現(xiàn)類(lèi)所有生命周期

    react 自 16.8 開(kāi)始,引入了 Hooks 概念,使得函數(shù)組件中也可以擁有自己的狀態(tài),并且可以模擬對(duì)應(yīng)的生命周期,這篇文章主要介紹了使用 React hooks 怎么實(shí)現(xiàn)類(lèi)里面的所有生命周期,需要的朋友可以參考下
    2023-02-02
  • 詳解react-refetch的使用小例子

    詳解react-refetch的使用小例子

    這篇文章主要介紹了詳解react-refetch的使用小例子,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • react中使用heatmap.js實(shí)現(xiàn)熱力圖的繪制

    react中使用heatmap.js實(shí)現(xiàn)熱力圖的繪制

    heatmap.js?是一個(gè)用于生成熱力圖的?JavaScript?庫(kù),React?是一個(gè)流行的?JavaScript?庫(kù),用于構(gòu)建用戶(hù)界面,本小編給大家介紹了在React?應(yīng)用程序中使用heatmap.js實(shí)現(xiàn)熱力圖的繪制的示例,文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • react 創(chuàng)建單例組件的方法

    react 創(chuàng)建單例組件的方法

    這篇文章主要介紹了react 創(chuàng)建單例組件的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04

最新評(píng)論