」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > React.js 中的純元件

React.js 中的純元件

發佈於2024-11-02
瀏覽:722

Pure Component in React.js保持元件純淨是 React 和函數式程式設計的基本原則。這裡對組件純度的概念進行了更深入的探討,包括維持 React 元件純度的好處和策略。


在 React 中保持組件純淨

什麼是純函數?

A 純函數 是個函數:

  1. 確定性:給定相同的輸入,它總是產生相同的輸出。
  2. 無副作用:它不會造成任何副作用,例如修改外部狀態或與外界互動(例如,進行API呼叫、操作DOM)。

為什麼要使用純組件?

  1. 可預測性:純粹組件的行為一致。您可以依賴它們的輸出,這簡化了有關應用程式的推理。

  2. 更容易測試:由於純組件是可預測的並且沒有副作用,因此它們更容易測試。您可以根據輸入 props 直接測試輸出,而無需擔心外部狀態變化。

  3. 效能最佳化:純元件有助於優化渲染。 React 可以根據 prop 的變化有效地判斷元件是否需要重新渲染。

  4. 可維護性:隨著程式碼庫的成長,維護純元件變得更簡單。它們封裝功能而沒有隱藏的依賴關係,使調試和重構更容易。

  5. 重複使用:純元件具有高度可重複使用性,因為它們不依賴外部狀態。您可以輕鬆地在不同的上下文中使用它們。

如何保持組件純淨

以下是確保您的組件保持純淨的一些策略:

  1. 避免副作用
    • 不要直接修改 props 或全域狀態。
    • 避免渲染方法內的非同步操作(例如 API 呼叫、計時器)。
   const PureComponent = ({ count }) => {
     // Pure function: does not cause side effects
     return 
{count}
; };
  1. 使用 React.memo
    • 用 React.memo 包覆功能元件,以防止在 props 沒有改變時不必要的重新渲染。
   const PureGreeting = React.memo(({ name }) => {
     return 

Hello, {name}!

; });
  1. 解構道具
    • 解構組件參數清單中的 props,以保持組件的結構整潔和集中。
   const PureButton = ({ label, onClick }) => {
     return ;
   };
  1. 提升狀態
    • 管理父元件中的狀態並將所需的資料和事件處理程序傳遞給子元件。這使得子組件保持純粹的功能。
   const ParentComponent = () => {
     const [count, setCount] = useState(0);

     return ;
   };
  1. 避免渲染中的內聯函數
    • 不要在渲染方法中內嵌定義函數,而是在外部定義它們。這可以防止在每次渲染時建立新的函數實例,從而導致不必要的重新渲染。
   const PureCounter = React.memo(({ count, setCount }) => {
     return ;
   });
  1. 避免直接改變狀態
    • 使用返回新狀態的方法,而不是直接改變現有狀態。這符合不變性原則。
   const handleAddItem = (item) => {
     setItems((prevItems) => [...prevItems, item]); // Pure approach
   };

純組件範例

這是遵循以下原則的純函數元件的完整範例:

import React, { useState } from 'react';

const PureCounter = React.memo(({ count, onIncrement }) => {
  console.log('PureCounter Rendered');
  return ;
});

const App = () => {
  const [count, setCount] = useState(0);

  const handleIncrement = () => {
    setCount((prevCount) => prevCount   1);
  };

  return (
    

Pure Component Example

); }; export default App;

結論

在 React 中保持元件純淨不僅可以簡化開發,還可以增強效能和可維護性。透過遵循純函數的原則,您可以建立可預測、可重複使用且易於測試的元件。遵循避免副作用、使用 React.memo 和適當管理狀態等最佳實踐可以幫助您建立強大且可銷售的應用程式。

版本聲明 本文轉載於:https://dev.to/theonlineaid/pure-component-in-reactjs-acl?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何在 Python 中修改函數內的列表:透過引用傳遞或就地修改?
    如何在 Python 中修改函數內的列表:透過引用傳遞或就地修改?
    修改函數內的列表在函數中使用列表參數時,傳遞給函數的引用指向原始列表。函數內對 list_arg 變數所做的任何修改都僅限於其局部範圍,不會影響原始列表。 要規避此問題並修改原始列表,需要直接將元素分配給列表而不是將整個列表重新分配給新值。這是一個例子:def function1(list_arg)...
    程式設計 發佈於2024-11-08
  • React Hooks:詳細說明
    React Hooks:詳細說明
    React Hooks 是允許您從功能元件「掛鉤」React 狀態和生命週期功能的函數。 Hooks 在 React 16.8 中引入,讓您無需編寫類別元件即可使用狀態和其他 React 功能。 我們來分解Hooks背後的核心概念: 1. 為什麼要使用 React Hooks? 在...
    程式設計 發佈於2024-11-08
  • 了解 JavaScript 產生器:強大的程式碼流控制工具
    了解 JavaScript 產生器:強大的程式碼流控制工具
    生成器是 JavaScript 中最强大的功能之一,它允许我们编写可以根据需要暂停和恢复的代码。与一次执行所有代码的常规函数​​不同,生成器使用延迟执行,增量返回值,从而更容易处理数据序列、迭代或长时间运行的进程。 发电机如何工作? 在JavaScript中,生成器是使用functi...
    程式設計 發佈於2024-11-08
  • 如何在 groupby 作業期間維護 Pandas DataFrame 中的其他欄位?
    如何在 groupby 作業期間維護 Pandas DataFrame 中的其他欄位?
    在Groupby 操作期間維護其他列對pandas 資料框執行groupby 操作時,通常需要保留不屬於的列參與分組或聚合過程。預設情況下,操作完成後將刪除這些其他欄位。如果保留的列包含有價值的信息,這可能會出現問題。 考慮以下資料框: item diff otherstuff ...
    程式設計 發佈於2024-11-08
  • 根據您文章的內容,以下是一些適合問答格式的標題選項:

選項 1(直接):

* 如何從 OpentelemetryContext Pr 中的字串追蹤 ID 建構跨度
    根據您文章的內容,以下是一些適合問答格式的標題選項: 選項 1(直接): * 如何從 OpentelemetryContext Pr 中的字串追蹤 ID 建構跨度
    在 Opentelemetry 中根據追蹤 ID 建構 Span上下文傳播通常用於檢索父追蹤 ID 並建立子 Span。但是,在使用標頭進行訊息交換的情況下,需要替代方法。 要從字串追蹤ID 建立範圍,可以依照下列步驟操作:建構一個解析Trace 和Span ID 的函式:func construc...
    程式設計 發佈於2024-11-08
  • 如何將 JSON 字串轉換為 Python 字典?
    如何將 JSON 字串轉換為 Python 字典?
    如何將JSON 字串轉換為Python 字典JSON(JavaScript 物件表示法)是一種流行的資料格式,通常以於表示複雜的資料結構。在 Python 中,您可以使用 json 模組來處理 JSON 資料。 一個常見的任務是將 JSON 字串轉換為 Python 字典。這允許您以鍵值對的形式存取...
    程式設計 發佈於2024-11-08
  • 治療高血壓的整體阿育吠陀方法
    治療高血壓的整體阿育吠陀方法
    管理高血壓的整體阿育吠陀方法 阿育吠陀治療高血壓提供了一種自然和整體的方法來管理這一常見的健康問題。在阿育吠陀中,高血壓通常與能量的不平衡有關,特別是皮塔和瓦塔。這種古老的醫學體系旨在透過個人化治療和生活方式改變來恢復平衡並促進整體健康。 治療高血壓的阿育吠陀療法包括使用特定草藥,如阿朱那、南非醉...
    程式設計 發佈於2024-11-08
  • 如何設定 Y 軸範圍以豐富多個子圖佈局中的視覺化?
    如何設定 Y 軸範圍以豐富多個子圖佈局中的視覺化?
    設定子圖軸範圍背景在視覺化中處理多個子圖時,有必要控制每個子圖的軸範圍以確保正確的數據表示。本問題探討如何在雙子圖佈局中設定第二個子圖的 y 軸範圍。當 FFT 圖出現異常尖峰,導致所需資料不可見時,就會出現此問題。 解決方案要解決此問題,請在繪圖後使用 pylab.ylim([bottom, to...
    程式設計 發佈於2024-11-08
  • CSS 中的盒子模型:製作精確版面的終極指南
    CSS 中的盒子模型:製作精確版面的終極指南
    Web設計概念中,盒子模型(Box Model)是CSS中非常關注佈局設計的基礎知識領域。盒子模型解釋了頁面上元素的放置和定位方式,這會影響水平度和整體連貫性。 除了概述盒子模型的背景和邊框之外,本指南還指導您完成填充、邊距和盒子大小調整,以便您可以完全控制佈局。要開始專業級的 Web 專案設計,...
    程式設計 發佈於2024-11-08
  • 什麼是語法和語義
    什麼是語法和語義
    如果您正在学习一门语言,您可能听说过“语法”这个词并且一直在处理它。 (该死的语法错误)。 几天前的晚上,我在想,我从来没有认真遵循过编程范式和技术,今天我开始从我经常听到的最小主题中学习(即使我已经记住了)。我创建了这个存储库。我采取的学习路径很有特色(在 LEARNING_LIST.md 文件中...
    程式設計 發佈於2024-11-08
  • 如何在不切換焦點的情況下在背景開啟新分頁?
    如何在不切換焦點的情況下在背景開啟新分頁?
    在後台打開新選項卡而不進行焦點切換在這個問題中,用戶尋求在單獨的選項卡中打開新選項卡不會導致任何焦點轉移到新選項卡。他們示範了使用 open() 和 focus() 方法的嘗試,但在傳回 Chrome 中的目前分頁之前遇到了新分頁的短暫閃爍。 但是,提供的答案提供了使用事件的替代解決方案自訂事件調度...
    程式設計 發佈於2024-11-08
  • 如何使用自訂語句來擴展 Python 語法?
    如何使用自訂語句來擴展 Python 語法?
    為 Python 語法新增語句Python 的語法允許語句定義,例如 print、raise 和 with。雖然這些語句提供了廣泛的功能,但可以擴展此語法以適應自訂語句。 建立自訂語句涉及兩個主要步驟建立自訂語句:修改語法:您需要更新Python 的語法以包含新語句的定義。這涉及到修改 Gramma...
    程式設計 發佈於2024-11-08
  • 使用 PHP 中的服務層模式實現簡潔且可擴展的程式碼
    使用 PHP 中的服務層模式實現簡潔且可擴展的程式碼
    服務層模式是一種流行的設計方法,用於處理 PHP 應用程式中的業務邏輯。透過將應用程式邏輯與框架分離,我們創建了一個可擴展、可測試且可維護的程式碼庫。在本文中,我們將透過實際範例介紹服務層模式的基礎知識、其優點以及如何在 PHP 應用程式中實現它。 什麼是服務層模式? 服務層模式是...
    程式設計 發佈於2024-11-08
  • 您能否在 C++ 中實現高效的二分搜尋演算法,將迭代器返回搜尋結果?
    您能否在 C++ 中實現高效的二分搜尋演算法,將迭代器返回搜尋結果?
    在C 中搜尋高效的二分搜尋演算法程式設計師經常尋求實現高效的二分搜尋演算法,以提供對數時間複雜度的優勢。一個常見的要求是演算法傳回一個指向搜尋結果的迭代器,而不是一個指示其存在的簡單布林值。 C 標準庫在 標頭中提供了 std::binary_search,但它只傳回一個布林值。正如提問者所指出的...
    程式設計 發佈於2024-11-08
  • 使用 Javascript 的心形圖案程式碼
    使用 Javascript 的心形圖案程式碼
    程式碼 let heart = ""; let size = 6; // Loop to print upper part of the heart for (let i = size / 2; i <= size; i = 2) { for (let j = 1;...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3