亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

react調(diào)試和測(cè)試代碼的小技巧

 更新時(shí)間:2024年10月19日 16:24:36   作者:eveningwater  
在開發(fā)React應(yīng)用時(shí),嚴(yán)格模式StrictMode可以幫助開發(fā)者捕捉到組件中的錯(cuò)誤和潛在問題,安裝React Developer Tools瀏覽器擴(kuò)展檢查組件的props和狀態(tài),直接修改以及分析性能,@testing-library/react和Cypress或Playwright等工具可以有效地測(cè)試React組件和執(zhí)行端到端測(cè)試

調(diào)試 react 代碼

在將組件部署到生產(chǎn)環(huán)境之前,使用 StrictMode 捕獲組件中的錯(cuò)誤

使用嚴(yán)格模式是一種在開發(fā)過程中檢測(cè)應(yīng)用程序中潛在問題的主動(dòng)方法。它有助于識(shí)別以下問題:

  • 效果中的清理不完整,例如忘記釋放資源。
  • React 組件中的雜質(zhì),確保它們?cè)诮o定相同輸入(props、state 和 context)的情況下返回一致的 JSX。

下面的示例顯示了一個(gè)錯(cuò)誤,因?yàn)閺奈凑{(diào)用過 clearInterval。 嚴(yán)格模式通過運(yùn)行兩次效果(創(chuàng)建兩個(gè)間隔)來幫助捕獲此錯(cuò)誤。

export default function App() {
  const [time, setTime] = useState<Date>(new Date());
  const handleTimeChange = useCallback((newTime: Date) => {
    // 這將被記錄兩次,因?yàn)?`useEffect`
    // 使用 `StrictMode` 運(yùn)行兩次,并且我們從未清除定時(shí)器
    console.log("這是當(dāng)前時(shí)間", newTime);
    setTime(newTime);
  }, []);

  useEffect(() => {
    const intervalId = setInterval(() => {
      handleTimeChange(new Date());
    }, 1_000);n
    // 取消注釋下面這行代碼來修復(fù)錯(cuò)誤
    // return () => clearInterval(intervalId);
  }, [handleTimeChange]);

  return (
    <div className="App">
      <h1>當(dāng)前時(shí)間: {time.toLocaleTimeString()}</h1>
    </div>
  );
}

安裝 React Developer Tools 瀏覽器擴(kuò)展來查看/編輯你的組件并檢測(cè)性能問題

React Developer Tools 是一款必備擴(kuò)展程序(Chrome、Firefox)。此擴(kuò)展程序可讓你:

  • 可視化并深入研究 React 組件的細(xì)節(jié),檢查從 props 到狀態(tài)的所有內(nèi)容。
  • 直接修改組件的狀態(tài)或 props,以查看更改如何影響行為和渲染。
  • 分析你的應(yīng)用程序以確定組件重新渲染的時(shí)間和原因,幫助你發(fā)現(xiàn)性能問題。
  • 等等。

 React DevTools 組件:突出顯示渲染的組件以識(shí)別潛在問題

如果你的應(yīng)用存在性能問題時(shí),都可以使用這個(gè)技巧。你可以突出顯示渲染的組件(高亮顯示)以檢測(cè)潛在問題(例如,渲染次數(shù)過多)。

在自定義 hooks 中利用 useDebugValue 可以在 React DevTools 中獲得更好的可視性

useDebugValue 可以成為一種便捷的工具,用于在 React DevTools 中為自定義鉤子添加描述性標(biāo)簽。這使得直接從 DevTools 界面監(jiān)視它們的狀態(tài)變得更加容易。

例如,考慮一下我用來獲取和顯示當(dāng)前時(shí)間的這個(gè)自定義鉤子,每秒更新一次:

const useCurrentTime = () => {
  const [time, setTime] = useState(new Date());

  useEffect(() => {
    const intervalId = setInterval(() => {
      setTime(new Date());
    }, 1000);
    return () => clearInterval(intervalId);
  }, [setTime]);

  return time;
};

不好的做法:如果沒有 useDebugValue,實(shí)際時(shí)間值不會(huì)立即可見;你需要擴(kuò)展 CurrentTime 鉤子:

推薦做法:使用 useDebugValue 可以很容易地看到當(dāng)前時(shí)間:

const useCurrentTime = () => {
  const [time, setTime] = useState(new Date());

  useEffect(() => {
    const intervalId = setInterval(() => {
      setTime(new Date());
    }, 1000);
    return () => clearInterval(intervalId);
  }, [setTime]);

  // 新增代碼
  useDebugValue(time);

  return time;
};

注意:請(qǐng)謹(jǐn)慎使用 useDebugValue。它最好用于共享庫(kù)中的復(fù)雜鉤子,因?yàn)榱私鈨?nèi)部狀態(tài)至關(guān)重要。

使用 why-did-you-render 等相關(guān)庫(kù)來跟蹤組件渲染并識(shí)別潛在的性能瓶頸

有時(shí),組件會(huì)重新渲染,但無法立即查明原因。雖然 React DevTools 很有用,但在大型應(yīng)用中,它可能只會(huì)提供模糊的解釋,例如“hook #1 已渲染”,這可能是無用的。

在這種情況下,你可以求助于 why-did-you-render 庫(kù)。它提供了有關(guān)組件重新渲染原因的更詳細(xì)見解,有助于更有效地查明性能問題。來看以下一個(gè)示例,多虧了這個(gè)庫(kù),我們可以找到 FollowersList 組件的問題。

在嚴(yán)格模式下第二次渲染時(shí)隱藏日志

StrictMode 有助于在應(yīng)用程序開發(fā)早期發(fā)現(xiàn)錯(cuò)誤。

但是,由于它會(huì)導(dǎo)致組件渲染兩次,因此可能會(huì)導(dǎo)致重復(fù)的日志,從而使控制臺(tái)變得混亂。

你可以在 Strict Mode 的第二次渲染期間隱藏日志以解決此問題,勾選hide logs....選項(xiàng)即可。如下圖所示:

測(cè)試 react 代碼

使用 React 測(cè)試庫(kù)有效地測(cè)試你的 React 組件

想要測(cè)試你的 React 應(yīng)用嗎?請(qǐng)務(wù)必使用 @testing-library/react。

你可以在此處找到一個(gè)最基本的示例。

React 測(cè)試庫(kù):使用測(cè)試演練場(chǎng)輕松創(chuàng)建測(cè)試用例

難以決定在測(cè)試中使用哪些測(cè)試用例?

考慮使用測(cè)試演練場(chǎng)從組件的 HTML 快速生成測(cè)試用例。

以下是兩種使用方法:

方法 1:在測(cè)試中使用 screen.logTestingPlaygroundURL()。此函數(shù)生成一個(gè) URL,打開測(cè)試環(huán)境工具,其中已加載組件的 HTML。

方法 2:安裝 Testing Playground Chrome 擴(kuò)展程序。此擴(kuò)展程序允許你直接在瀏覽器中將鼠標(biāo)懸停在應(yīng)用中的元素上,以找到測(cè)試它們的最佳查詢。

使用 Cypress 或 Playwright 進(jìn)行端到端測(cè)試

需要進(jìn)行端到端測(cè)試嗎?

請(qǐng)務(wù)必查看 Cypress 或 Playwright。

使用 MSW 在測(cè)試中模擬網(wǎng)絡(luò)請(qǐng)求

有時(shí),你的測(cè)試需要發(fā)出網(wǎng)絡(luò)請(qǐng)求。

與其實(shí)現(xiàn)自己的模擬(或者,但愿不會(huì)發(fā)出實(shí)際的網(wǎng)絡(luò)請(qǐng)求),不如考慮使用 MSW(Mock Service Worker)來處理你的 API 響應(yīng)。

MSW 允許你直接在測(cè)試中攔截和操縱網(wǎng)絡(luò)交互,為模擬服務(wù)器響應(yīng)提供了一種強(qiáng)大而直接的解決方案,而不會(huì)影響實(shí)時(shí)服務(wù)器。

這種方法有助于維護(hù)受控且可預(yù)測(cè)的測(cè)試環(huán)境,從而提高測(cè)試的可靠性。

總結(jié)

在開發(fā)React應(yīng)用時(shí),使用嚴(yán)格模式StrictMode可以幫助開發(fā)者捕捉到組件中的錯(cuò)誤和潛在問題,如資源未正確釋放或組件純度問題,安裝React Developer Tools瀏覽器擴(kuò)展可以深入檢查組件的props和狀態(tài),直接修改它們以及分析性能問題,此外,使用useDebugValue可以為自定義hooks在React DevTools中添加描述性標(biāo)簽,提高可視化監(jiān)控的便利性,為了進(jìn)一步追蹤組件的渲染性能和識(shí)別性能瓶頸,可以利用why-did-you-render庫(kù),在進(jìn)行測(cè)試時(shí),@testing-library/react和Cypress或Playwright等工具可以有效地測(cè)試React組件和執(zhí)行端到端測(cè)試,另外,使用MockServiceWorker(MSW)模擬網(wǎng)絡(luò)請(qǐng)求,保持測(cè)試環(huán)境的可控性和預(yù)測(cè)性。

到此這篇關(guān)于react調(diào)試和測(cè)試代碼的小技巧的文章就介紹到這了,更多相關(guān)react調(diào)試和測(cè)試代碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 記錄一次完整的react hooks實(shí)踐

    記錄一次完整的react hooks實(shí)踐

    這篇文章主要介紹了記錄一次完整的react hooks實(shí)踐,通過一個(gè)簡(jiǎn)單示例,介紹了react hooks,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • react字符串匹配關(guān)鍵字高亮問題

    react字符串匹配關(guān)鍵字高亮問題

    這篇文章主要介紹了react字符串匹配關(guān)鍵字高亮問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 教你快速搭建 React Native 開發(fā)環(huán)境

    教你快速搭建 React Native 開發(fā)環(huán)境

    這篇文章主要介紹了搭建 React Native 開發(fā)環(huán)境的詳細(xì)過程,本文通過圖文指令給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • React中Suspense及l(fā)azy()懶加載及代碼分割原理和使用方式

    React中Suspense及l(fā)azy()懶加載及代碼分割原理和使用方式

    這篇文章主要介紹了React中Suspense及l(fā)azy()懶加載及代碼分割原理和使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • React?狀態(tài)管理中的Jotai詳解

    React?狀態(tài)管理中的Jotai詳解

    Jotai是一個(gè)簡(jiǎn)單、靈活、高效的React狀態(tài)管理庫(kù),通過原子和派生狀態(tài)的設(shè)計(jì),使得狀態(tài)管理變得直觀和高效,它適用于小型應(yīng)用、組件庫(kù)和大型項(xiàng)目的局部狀態(tài)管理,且與TypeScript兼容,Jotai的社區(qū)正在壯大,提供了豐富的資源和支持,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • 嘗試自己動(dòng)手用react來寫一個(gè)分頁(yè)組件(小結(jié))

    嘗試自己動(dòng)手用react來寫一個(gè)分頁(yè)組件(小結(jié))

    本篇文章主要介紹了嘗試自己動(dòng)手用react來寫一個(gè)分頁(yè)組件(小結(jié)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • React利用scheduler思想實(shí)現(xiàn)任務(wù)的打斷與恢復(fù)

    React利用scheduler思想實(shí)現(xiàn)任務(wù)的打斷與恢復(fù)

    這篇文章主要為大家詳細(xì)介紹了React如何利用scheduler思想實(shí)現(xiàn)任務(wù)的打斷與恢復(fù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下
    2024-03-03
  • 一文詳解React Redux設(shè)計(jì)思想與工作原理

    一文詳解React Redux設(shè)計(jì)思想與工作原理

    最近看項(xiàng)目中使用了?Redux,?便嘗試了解一波?Redux?的設(shè)計(jì)思想與工作原理,所以本文詳細(xì)的給大家介紹了Redux設(shè)計(jì)思想與工作原理,需要的朋友可以參考下
    2023-09-09
  • React使用Mobx6.x共享狀態(tài)問題

    React使用Mobx6.x共享狀態(tài)問題

    這篇文章主要介紹了React使用Mobx6.x共享狀態(tài)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • react項(xiàng)目中如何引入國(guó)際化

    react項(xiàng)目中如何引入國(guó)際化

    在React項(xiàng)目中引入國(guó)際化可以使用第三方庫(kù)來實(shí)現(xiàn),本文主要介紹了react項(xiàng)目中如何引入國(guó)際化,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07

最新評(píng)論