React學習(二)-變量

也是很無聊,竟然寫這玩意,畢竟不是學術研究,普通工作沒那么多概念性東西,會用就行╮(╯▽╰)╭
在React中,變量是用于存儲和管理數據的基本單位。根據其用途和生命周期,React中的變量可以分為以下幾類:


1. 狀態變量(State)

  • 用途:用于存儲組件的內部狀態,狀態變化會觸發組件的重新渲染。
  • 定義方式
    • 函數組件:使用useState鉤子。
      const [count, setCount] = useState(0);
      
    • 類組件:使用this.statethis.setState
      class MyComponent extends React.Component {state = { count: 0 };render() {return <div>{this.state.count}</div>;}
      }
      
  • 特點
    • 狀態是組件私有的,外部無法直接訪問。
    • 更新狀態需要使用特定的方法(如setCountthis.setState)。

2. 屬性變量(Props)

  • 用途:用于從父組件向子組件傳遞數據。
  • 定義方式
    • 父組件傳遞:
      <ChildComponent name="John" age={25} />
      
    • 子組件接收:
      function ChildComponent(props) {return <div>{props.name}, {props.age}</div>;
      }
      
  • 特點
    • Props是只讀的,子組件不能直接修改。
    • 可以通過defaultProps設置默認值。

3. 局部變量

  • 用途:在函數或組件內部定義的臨時變量,用于存儲中間數據。
  • 定義方式
    function MyComponent() {const message = "Hello, World!";return <div>{message}</div>;
    }
    
  • 特點
    • 局部變量的生命周期僅限于函數或組件的執行過程。
    • 不會觸發組件的重新渲染。

4. 上下文變量(Context)

  • 用途:用于在組件樹中跨層級傳遞數據,避免逐層傳遞Props。
  • 定義方式
    • 創建上下文:
      const MyContext = React.createContext();
      
    • 提供上下文值:
      <MyContext.Provider value={{ theme: "dark" }}><ChildComponent />
      </MyContext.Provider>
      
    • 使用上下文值:
      function ChildComponent() {const context = useContext(MyContext);return <div>{context.theme}</div>;
      }
      
  • 特點
    • 適用于全局或共享數據的場景。
    • 避免“Props Drilling”問題。

5. Ref變量(Refs)

  • 用途:用于直接訪問DOM元素或存儲可變值,且不會觸發重新渲染。
  • 定義方式
    • 使用useRef鉤子:
      const inputRef = useRef(null);
      
    • 綁定到DOM元素:
      <input ref={inputRef} />
      
    • 訪問DOM元素:
      inputRef.current.focus();
      
  • 特點
    • Ref的值在組件重新渲染時保持不變。
    • 適用于需要直接操作DOM的場景。

6. 全局變量

  • 用途:在組件外部定義的變量,可以在多個組件中共享。
  • 定義方式
    const globalVar = "This is a global variable";
    
  • 特點
    • 全局變量的生命周期與應用程序一致。
    • 不推薦過度使用,可能導致代碼難以維護。

7. 計算變量(Derived State)

  • 用途:基于狀態或屬性計算得出的變量。
  • 定義方式
    const total = count * price;
    
  • 特點
    • 通常用于根據現有狀態或屬性生成新的數據。
    • 避免在狀態中存儲冗余數據。

8. 模塊變量

  • 用途:在模塊中定義的變量,可以在模塊內的多個組件中共享。
  • 定義方式
    // module.js
    export const moduleVar = "This is a module variable";
    
  • 特點
    • 模塊變量的作用域僅限于當前模塊。
    • 適用于模塊內共享數據的場景。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/905918.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905918.shtml
英文地址,請注明出處:http://en.pswp.cn/news/905918.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

完整卸載 Fabric Manager 的方法

目錄 ? 完整卸載 Fabric Manager 的方法 1?? 停止并禁用服務 2?? 卸載 Fabric Manager 軟件包 3?? 自動清理無用依賴&#xff08;可選&#xff09; 4?? 檢查是否卸載成功 ? 補充&#xff08;僅清除服務&#xff0c;不刪包&#xff09; ? 完整卸載 Fabric Mana…

ABP vNext 多租戶開發實戰指南

&#x1f680; ABP vNext 多租戶開發實戰指南 &#x1f6e0;? 環境&#xff1a;.NET 8.0 ABP vNext 8.1.5 (C# 11, EF Core 8) &#x1f4da; 目錄 &#x1f680; ABP vNext 多租戶開發實戰指南&#x1f3e0; 一、什么是多租戶&#xff1f;&#x1f4e6; 二、ABP 多租戶的核…

【WIN】筆記本電腦忘記密碼解決辦法/筆記本電腦重裝系統筆記/bitlocker忘記密碼的解決辦法

通過安全模式下的CMD命令找回 具體的步驟就是&#xff1a; 首先通過筆記本的對應的一個進入安全模式的一個方式 進入安全模式之后&#xff0c;一直點著這個診斷&#xff0c;然后高級選項進去就可以看到了。 但是這種方法應該是屬于安全漏洞&#xff0c;所以只適合老版本。如果是…

人工智能100問?第25問:什么是循環神經網絡(RNN)?

目錄 一、通俗解釋 二、專業解析 三、權威參考 循環神經網絡(RNN)是一種通過“記憶”序列中歷史信息來處理時序數據的神經網絡,可捕捉前后數據的關聯性,擅長處理語言、語音等序列化任務。 一、通俗解釋 想象你在和朋友聊天,每說一句話都會根據之前的對話內容調整語氣…

實驗八 基于Python的數字圖像問題處理

一、實驗目的 ? 培養利用圖像處理技術解決實際問題的能力。 ? 培養利用圖像處理技術綜合設計實現的能力。 ? 掌握在Python環境下解決實際問題的能力。 ? 熟練掌握使用cv2庫對圖像進行處理 ? 熟練掌握使用區域生長法提取圖片中感興趣的區域 二、實驗內容 本次實驗內容為…

STM32F10xx 參考手冊

6. 什么是寄存器 本章參考資料&#xff1a;《STM32F10xx 參考手冊》、《STM32F10xx數據手冊》、 學習本章時&#xff0c;配合《STM32F10xx 參考手冊》“存儲器和總線架構”及“通用I/O(GPIO)”章節一起閱讀&#xff0c;效果會更佳&#xff0c;特別是涉及到寄存器說明的部分。…

TCVectorDB 向量數據庫簡介

簡介 盡管目前大多數開源向量數據庫來自海外&#xff0c;配置簡單且性能優異&#xff0c;但由于網絡原因&#xff0c;如果向量數據庫部署在海外&#xff0c;而產品面向國內市場&#xff0c;網絡延遲將是必須考慮的問題。因此&#xff0c;選擇國內服務提供商的云向量數據庫往往是…

力扣-比特位計數(統計一個數二進制下1的個數)

下面是題面 1.用c的內置函數__builtin_popcount&#xff08;&#xff09; 語法&#xff1a;__builtin_popcount&#xff08;int x&#xff09;&#xff0c;函數會返回一個二進制下x所含的1的個數 2.直接數位枚舉 這是最慢也是暴力做法&#xff0c;寫法也很簡單 用一個while循環…

青少年編程與數學 02-019 Rust 編程基礎 16課題、包、單元包及模塊

青少年編程與數學 02-019 Rust 編程基礎 16課題、包、單元包及模塊 一、包1. **什么是 Crate&#xff1f;**2. **Crate 的類型**3. **Crate 的結構**4. **使用 Crate**5. **創建和管理 Crate**6. **發布 Crate**7. **Crate 的優勢**8. **示例**創建一個 library crate 二、單元…

強化學習入門:馬爾科夫獎勵過程二

文章目錄 前言1、動作2、策略總結 前言 最近想開一個關于強化學習專欄&#xff0c;因為DeepSeek-R1很火&#xff0c;但本人對于LLM連門都沒入。因此&#xff0c;只是記錄一些類似的讀書筆記&#xff0c;內容不深&#xff0c;大多數只是一些概念的東西&#xff0c;數學公式也不會…

【大數據知識】今天聊聊Clickhouse部署方案

ClickHouse部署 一、ClickHouse部署一、單節點部署1. 安裝準備2. 目錄規劃3. 核心配置4. 啟動服務 二、集群部署方案1. 集群拓撲設計2. 分布式配置3. 表引擎選擇 三、安全加固1. 認證配置2. SSL加密 四、性能優化1. 核心參數調優2. 資源隔離 五、監控與維護1. Prometheus 集成2…

打卡Day28

題目1&#xff1a;定義圓&#xff08;Circle&#xff09;類 要求&#xff1a; 1.包含屬性&#xff1a;半徑 radius。 2.包含方法&#xff1a; ●calculate_area()&#xff1a;計算圓的面積&#xff08;公式&#xff1a;πr&#xff09;。 ●calculate_circumference()&#xff…

BERT 進階:Albert 模型詳解與實戰

目錄 BERT 進階&#xff1a;Albert 模型詳解與實戰 一、ALBERT 的優化策略 &#xff08;一&#xff09;Embedding 參數因式分解 &#xff08;二&#xff09;跨層參數共享 &#xff08;三&#xff09;巨劍連貫性損失 二、ALBERT 模型架構 &#xff08;一&#xff09;Tran…

使用 163 郵箱實現 Spring Boot 郵箱驗證碼登錄

使用 163 郵箱實現 Spring Boot 郵箱驗證碼登錄 本文將詳細介紹如何使用網易 163 郵箱作為 SMTP 郵件服務器&#xff0c;實現 Spring Boot 項目中的郵件驗證碼發送功能&#xff0c;并解決常見配置報錯問題。 一、為什么需要郵箱授權碼&#xff1f; 出于安全考慮&#xff0c;大…

深入解析Spring Boot與Spring Security的集成實踐

深入解析Spring Boot與Spring Security的集成實踐 引言 在現代Web應用開發中&#xff0c;安全性是一個不可忽視的重要方面。Spring Security作為Spring生態中的安全框架&#xff0c;提供了強大的認證和授權功能。本文將結合Spring Boot&#xff0c;詳細介紹如何集成Spring Se…

C#將1GB大圖裁剪為8張圖片

C#處理超大圖片&#xff08;1GB&#xff09;需要特別注意內存管理和性能優化。以下是幾種高效裁剪方案&#xff1a; 方法1&#xff1a;使用System.Drawing分塊處理&#xff08;內存優化版&#xff09; using System; using System.Drawing; using System.Drawing.Imaging; us…

Linux系統啟動相關:vmlinux、vmlinuz、zImage,和initrd 、 initramfs,以及SystemV 和 SystemD

目錄 一、vmlinux、vmlinuz、zImage、bzImage、uImage 二、initrd 和 initramfs 1、initrd&#xff08;Initial RAM Disk&#xff09; 2、initramfs&#xff08;Initial RAM Filesystem&#xff09; 3、initrd vs. initramfs 對比 4. 如何查看和生成 initramfs 三、Syste…

AIStarter Windows 版本迎來重磅更新!模型插件工作流上線,支持 Ollama / ComfyUI 等多平臺本地部署模型統一管理

如果你正在使用 AIStarter 工具進行本地 AI 模型部署 &#xff0c;那么這條消息對你來說非常重要&#xff01; 在最新推出的 AIStarter Windows 正式版更新中 &#xff0c;官方對整個平臺進行了功能重構和性能優化&#xff0c;尤其是新增了「模型插件工作流 」功能&#xff0c…

深入理解橋接模式:解耦抽象與實現的設計藝術

一、為什么需要橋接模式&#xff1f;從“類爆炸”問題說起 你是否遇到過這樣的開發困境&#xff1f; 當需要為系統擴展新功能時&#xff0c;繼承體系像滾雪球一樣越變越臃腫&#xff1a;新增一種遙控器類型&#xff0c;需要為電視、音響各寫一個子類&#xff1b;新增一種設備類…

Java 中的泛型原理與實踐案例

引言&#xff1a;為什么需要泛型 在Java 5之前&#xff0c;集合類只能存儲Object類型的對象&#xff0c;這帶來了兩個主要問題&#xff1a; 類型不安全&#xff1a;可以向集合中添加任何類型的對象&#xff0c;容易出錯繁瑣的類型轉換&#xff1a;從集合中取出元素時需要手動…