React---day5

4、React的組件化

組件的分類:

  • 根據組件的定義方式,可以分為:函數組件(Functional Component )和類組件(Class Component);
  • 根據組件內部是否有狀態需要維護,可以分成:無狀態組件(Stateless Component )和有狀態組件(Stateful Component);
  • 根據組件的不同職責,可以分成:展示型組件(Presentational Component)和容器型組件(Container Component);

函數組件、無狀態組件、展示型組件主要關注UI的展示;
類組件、有狀態組件、容器型組件主要關注數據邏輯;

類組件:

import React from "react";
export class App extends React.Component{constructor(){super();this.state =  {counter : 0}}render(){return (<div><h2>當前計數為{this.state.counter}</h2></div>)}
}

函數組件:

export function Func (){return (<div><span>我是function的組件:App組件</span></div>)
}

類組件:

  • 組件的名稱是大寫字符開頭(無論類組件還是函數組件)
  • 類組件需要繼承自 React.Component
  • 類組件必須實現render函數

函數組件:

  • 沒有生命周期,也會被更新并掛載,但是沒有生命周期函數;
  • 沒有this(組件實例);
  • 沒有內部狀態(state);
  • 我們來定義一個函數組件:

render函數的返回

  • React 元素:

    通常通過 JSX 創建。例如,

    會被 React 渲染為 DOM 節點, 會被 React 渲染為自定義組件;無論是
    還是 均為 React 元素。

  • 數組或 fragments:使得 render 方法可以返回多個元素。

  • Portals:可以渲染子節點到不同的 DOM 子樹中。

  • 字符串或數值類型:它們在 DOM 中會被渲染為文本節點

  • 布爾類型或 null:什么都不渲染。

5、React的生命周期

什么是生命周期:

  • 比如裝載階段(Mount),組件第一次在DOM樹中被渲染的過程;
  • 比如更新過程(Update),組件狀態發生變化,重新更新渲染的過程;
  • 比如卸載過程(Unmount),組件從DOM樹中被移除的過程;

生命周期函數:

  • 比如實現componentDidMount函數:組件已經掛載到DOM上時,就會回調;
  • 比如實現componentDidUpdate函數:組件已經發生了更新時,就會回調;
  • 比如實現componentWillUnmount函數:組件即將被移除時,就會回調;

在這里插入圖片描述

詳解生命周期函數:

Constructor
如果不初始化 state 或不進行方法綁定,則不需要為 React 組件實現構造函數。
constructor中通常只做兩件事情:

  • 通過給 this.state 賦值對象來初始化內部的state;
  • 為事件綁定實例(this);

componentDidMount
componentDidMount() 會在組件掛載后(插入 DOM 樹中)立即調用。
componentDidMount中通常進行哪里操作呢?

    • 依賴于DOM的操作可以在這里進行;
    • 在此處發送網絡請求就最好的地方;(官方建議)
    • 可以在此處添加一些訂閱(會在componentWillUnmount取消訂閱);

componentDidUpdate

  • componentDidUpdate() 會在更新后會被立即調用,首次渲染不會執行此方法。
  • 當組件更新后,可以在此處對 DOM 進行操作;
  • 如果你對更新前后的 props 進行了比較,也可以選擇在此處進行網絡請求;(例如,當 props 未發生變化時,則不會執行網絡請求)。

componentWillUnmount

  • componentWillUnmount() 會在組件卸載及銷毀之前直接調用。
  • 在此方法中執行必要的清理操作;例如,清除 timer,取消網絡請求或清除,在 componentDidMount() 中創建的訂閱等;

不常用的生命周期函數

getDerivedStateFromProps

getDerivedStateFromProps 是 React 16.3 引入的一個靜態生命周期方法,用于在組件接收到新的 props 時同步更新 state

  • 作用:確保 stateprops 保持同步,特別是當 state 的值完全依賴于 props 時。
  • 調用時機:在組件初始化、接收到新的 props 或父組件強制更新時被調用。
  • 返回值:返回一個對象,表示需要更新的 state,如果不需要更新則返回 null

getSnapshotBeforeUpdate

getSnapshotBeforeUpdate 是在 React 更新 DOM 之前調用的一次性生命周期函數,用于獲取 DOM 更新前的一些信息(如滾動位置)。

  • 作用:在組件更新之前捕獲 DOM 的某些狀態,以便在更新后使用這些信息。
  • 調用時機:在 render 方法之后、DOM 更新之前調用。
  • 返回值:返回值將作為 componentDidUpdate 的第三個參數傳遞。

shouldComponentUpdate

shouldComponentUpdate 是一個性能優化的生命周期函數,用于決定組件是否需要重新渲染。

  • 作用:通過返回 truefalse 控制組件的更新,從而避免不必要的渲染。
  • 調用時機:在組件接收到新的 propsstate 時,但在 render 之前調用。

6、組件之間進行數據傳遞

父傳子:

父組件:

 <div><ChildCpn name="蔣乙菥" age="18" height="1,88" />
</div>

子組件:

export class ChildCpn extends React.Component{render(){const {name , age , height} = this.propsreturn (<div><h2>{"姓名" + name + "," + "年齡" + age + "身高" + height}</h2></div>)}}

制更新時被調用。

  • 返回值:返回一個對象,表示需要更新的 state,如果不需要更新則返回 null

getSnapshotBeforeUpdate

getSnapshotBeforeUpdate 是在 React 更新 DOM 之前調用的一次性生命周期函數,用于獲取 DOM 更新前的一些信息(如滾動位置)。

  • 作用:在組件更新之前捕獲 DOM 的某些狀態,以便在更新后使用這些信息。
  • 調用時機:在 render 方法之后、DOM 更新之前調用。
  • 返回值:返回值將作為 componentDidUpdate 的第三個參數傳遞。

shouldComponentUpdate

shouldComponentUpdate 是一個性能優化的生命周期函數,用于決定組件是否需要重新渲染。

  • 作用:通過返回 truefalse 控制組件的更新,從而避免不必要的渲染。
  • 調用時機:在組件接收到新的 propsstate 時,但在 render 之前調用。

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

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

相關文章

測試策略:AI模型接口的單元測試與穩定性測試

測試策略:AI模型接口的單元測試與穩定性測試 在構建支持AI能力的系統中,開發者不僅要關注業務邏輯的正確性,也必須保障AI模型接口在各種環境下都能穩定運行。這就要求我們在開發階段制定清晰的測試策略,從功能驗證到性能保障,逐步推進系統可用性、可維護性與可擴展性的提…

UniApp 生產批次管理模塊技術文檔

UniApp 生產批次管理模塊技術文檔 1. 運行卡入站頁面 (RunCardIn) 1.1 頁面結構 <template><!-- 頁面容器 --><view class"runCardIn" :style"{ paddingTop: padding }"><!-- 頁頭組件 --><pageHeader :title"$t(MENU:…

針對Helsinki-NLP/opus-mt-zh-en模型進行雙向互翻的微調

引言 ?題目聽起來有點怪怪的&#xff0c;但是實際上就是對Helsinki-NLP/opus-mt-en-es模型進行微調。但是這個模型是單向的&#xff0c;只支持中到英的翻譯&#xff0c;反之則不行。這樣的話&#xff0c;如果要做中英雙向互翻就需要兩個模型&#xff0c;那模型體積直接大了兩倍…

Object轉Map集合

對象與 Map 轉換詳解&#xff1a; Object.entries() 和 Object.fromEntries() 1&#xff0c;Object.fromEntries() 的主要用途就是將鍵值對集合&#xff08;如 Map&#xff09;轉換為普通對象。 2&#xff0c;Object.entries() 返回一個二維數組&#xff0c;其中每個子數組包…

優先隊列用法

第 5 行定義了一個隊首是最大值的優先隊列,第 10 行的輸出如下: 27 - wuhan 21 - shanghai 11 - beijing 第 13 行定義了一個隊首是最小值的優先隊列,第 19 行的輸出如下: 11 - beijing 21 - shanghai 27 - wuhan #include <bits/stdc.h> using namespace std; int…

Spring Boot3.4.1 集成redis

Spring Boot3.4.1 集成redis 第一步 引入依賴 <!-- redis 緩存操作 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- pool 對象池 …

Replacing iptables with eBPF in Kubernetes with Cilium

source: https://archive.fosdem.org/2020/schedule/event/replacing_iptables_with_ebpf/attachments/slides/3622/export/events/attachments/replacing_iptables_with_ebpf/slides/3622/Cilium_FOSDEM_2020.pdf 使用Cilium&#xff0c;結合eBPF、Envoy、Istio和Hubble等技術…

英一真題閱讀單詞筆記 05年

2005 年 Text 1 第一段 序號 單詞 音標 詞義 1 fat [ft] a. 豐厚的&#xff0c;巨額的&#xff1b;肥胖的 2 pay [pe?] n. 薪水 3 rise [ra?z] n. 上漲&#xff0c;增加&#xff1b;斜坡 4 pleasure [ple??(r)] n. 快樂&#xff1b;樂事 5 pleasure a…

FastAPI集成APsecheduler的BackgroundScheduler+mongodb(精簡)

項目架構&#xff1a; FastAPI(folder) >app(folder) >core(folder) >models(folder) >routers(folder) >utils(folder) main.py(file) 1 utils文件夾下新建schedulers.py from apscheduler.schedulers.background import BackgroundScheduler from apschedu…

聊一聊接口測試中耗時請求如何合理安排?

目錄 一、異步處理與輪詢機制 輪詢檢查機制 二、 并行化測試執行 三、模擬與樁技術&#xff08;Mock/Stub&#xff09; 四、動態超時與重試策略 五、測試架構設計優化 分層測試策略 并行化執行 網絡優化 六、測試用例分層管理 金字塔策略 七、 緩存與數據復用 響應…

深入詳解DICOMweb:WADO與STOW-RS的技術解析與實現

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家、CSDN平臺優質創作者&#xff0c;高級開發工程師&#xff0c;數學專業&#xff0c;10年以上C/C, C#, Java等多種編程語言開發經驗&#xff0c;擁有高級工程師證書&#xff1b;擅長C/C、C#等開發語言&#xff0c;熟悉Java常用開…

Splunk Validated Architecture (SVA):構建企業級可觀測性與安全的基石

Splunk Validated Architecture (SVA) 是 Splunk 官方提供的一套經過嚴格測試、性能驗證和最佳實踐指導的參考架構藍圖。它并非單一固定方案&#xff0c;而是根據企業數據規模、性能需求、高可用性目標和合規要求&#xff0c;提供一系列可落地的部署模型。SVA 的核心價值在于為…

Armv7l或樹莓派32位RPI 4B編譯faiss

pip3 install faiss-cpu當然找不到預編譯的包 手動下載 git clone https://github.com/facebookresearch/faiss.git cd faiss #能需要切換到特定版本標簽&#xff0c;例如 v1.7.1&#xff0c;這個版本Cmake 3.18可以過&#xff0c;因為apt install安裝的cmake只更新到這里&am…

C++之string的模擬實現

string 手寫C字符串類類的基本結構與成員變量一、構造函數與析構函數二、賦值運算符重載三、迭代器支持四、內存管理與擴容機制五、字符串操作函數六、運算符重載總結 手寫C字符串類 從零實現一個簡易版std::string 類的基本結構與成員變量 namespace zzh { class string { …

修改Docker鏡像源

配置文件位置&#xff1a; sudo vim /etc/docker/daemon.json Docker 或 containerd 的鏡像加速器配置&#xff0c;旨在提高從 Docker Hub 拉取鏡像的速度。 { "features": { "buildkit": true, "containerd-snapshotter": true }, …

服務器帶寬線路的區別(GIA、CN2、BGP、CMI等)

服務器帶寬線路的區別&#xff08;GIA、CN2、BGP、CMI等&#xff09; 一、BGP線路 1. 定義與技術特點 BGP&#xff08;Border Gateway Protocol&#xff0c;邊界網關協議&#xff09;是一種用于不同自治系統&#xff08;AS&#xff09;之間交換路由信息的協議&#xff0c;屬…

從0到1搭建AI繪畫模型:Stable Diffusion微調全流程避坑指南

從0到1搭建AI繪畫模型&#xff1a;Stable Diffusion微調全流程避坑指南 系統化學習人工智能網站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目錄 從0到1搭建AI繪畫模型&#xff1a;Stable Diffusion微調全流程避坑指南摘要引言一、數據集構…

VSCode + GD32F407 構建燒錄

前言 最近調試一塊 GD32F407VET6&#xff08;168Mhz&#xff0c;8Mhz晶振&#xff09; 板子時&#xff0c;踩了一些“啟動失敗”的坑。本以為是時鐘配置有誤&#xff0c;最后發現是鏈接腳本&#xff08;.ld 文件&#xff09;沒有配置好&#xff0c;導致程序根本沒能正常執行 ma…

AI繪畫提示詞:從零開始掌握Prompt Engineering的藝術

文章目錄 什么是AI繪畫提示詞&#xff1f;提示詞的基本結構主體描述場景/背景風格指定技術參數負面提示人物肖像模板風景模板 高級技巧權重調整混合風格顏色控制情緒氛圍 常見問題與解決方法手部變形問題構圖不理想風格不夠突出 提示詞示例庫科幻場景奇幻人物靜物畫 結語 在當今…

在 Linux 上安裝 Minikube:輕松搭建本地 Kubernetes 單節點集群

&#x1f525;「炎碼工坊」技術彈藥已裝填&#xff01; 點擊關注 → 解鎖工業級干貨【工具實測|項目避坑|源碼燃燒指南】 一、Minikube 是什么&#xff1f; Minikube 是 Kubernetes 官方推出的輕量級工具&#xff0c;專為開發者設計&#xff0c;用于在本地快速搭建單節點 Kube…