react基礎語法視圖層類組件

react基礎語法視圖層&類組件

MVVM

*區別mvc&mvvm

兩者的區別:

數據模型去渲染視圖。數據層改了,vue自己會監聽到幫我們拿最新的數據去渲染視圖;構建數據構建視圖,數據驅動的思想。這一套是非常相似的。

視圖中的內容改變,比如一個input,vue會監測到視圖改變自己把數據改了,不僅實現了數據驅動視圖,視圖也驅動數據,反向地視圖驅動數據,雙向的

jsx構建視圖

xml:通過自定義標簽存儲數據

通過reactdom

首先是我們的胡子語法

10n -> bigint

除了number&string其他都渲染成空

若是數組,會把數組每一項拿出來渲染

但是也有例外:

  1. 函數對象可作為一個組件渲染
  2. 行內樣式style必須是一個對象

擴展:駝峰命名法

  1. style必須是一個對象
  2. class要用className去做

具體應用:判斷&循環

循環

循環元素要加唯一key屬性

引出稀疏數組的問題:

*jsx底層原理

1.createElement生成虛擬dom

虛擬dom: 框架內部自己構建的對象體系。基于對象的這些屬性去描述對應dom節點的相關特征。有哪些標簽節點,dom節點有什么特征特點,有什么屬性,有什么內容……通過自己構建的對象體系已經描述出來了。

babal-presest-react-app編譯成createElement格式

  1. 當前元素標簽名
  2. 當前元素身上那些屬性,沒有就是null。
  3. 第三及以后都是子節點。

React.Fragment -> Symbol(react.fragment)

React.createElement的返回結果就是我們的虛擬dom,即jsx對象。

type標簽名

props既包含了自身屬性,又包含子節點。children若一個子節點就直接為其值,多個就是一個數組。

jsx中不能渲染一個對象?以下3種除外

  1. 數組是可以的
  2. style必須是一個對象
  3. 直接渲染虛擬dom對象

2.虛擬dom -> 真實dom

虛擬dom變為真實dom,通過render方法。

*擴展一下遍歷對象屬性

for in(控制臺中淺色淺紫色代表不可枚舉的)。

我們一般從3個維度去分析遍歷對象屬性的api:公有還是私有,是否可枚舉,是否symbol。我們一般認為,僅私有,全部(不僅僅可枚舉),全部(不僅僅非symbol)是比較好的。

私有/公有

是否僅可枚舉

是否symbol

for in

公有也會。×

僅。×

僅非symbol。×

Object.keys

僅私有。√

僅。×

僅非symbol。×

Object.getOwnPropertyNames

僅私有。√

全部。√

僅非symbol。×

Object.getOwnPropertySymbol

僅私有。√

全部。√

僅symbol。×

Relect.ownKeys

僅私有。√

全部。√

全部。√

render方法實現

函數組件渲染底層原理

工程化就是在組件化的基礎上合并、壓縮、打包

函數組件的概念:

函數組件:創建一個函數,返回jsx視圖。

編譯流程基本一致,主要的區別就是type是一個函數

子節點 -》props.childeren雙閉合調用的時候會產生

props屬性

只讀的。

對象的規則有三個:

作用:父傳子,通過props

插槽處理機制

插槽傳遞的是視圖,html標簽dom結構,

React上有很多方法,use是hooks函數,

React.children,內部實現了轉換成了array。

具名插槽實現

組件封裝

靜態組件&動態組件

類組件

*js繼承

call繼承 + 原型繼承

剛總結了,讓A繼承于B,就是讓A.prototype的__proto__屬性值為B.prototype

function A(){
    B.call(this) // 繼承B的私有this.name = 'angela'
    this.age = 18
}
A.prototype.sum =function(a,b){return a+b;}function B(){
    this.sex='female'
}
B.prototype.sus=function(a,b){ return a-b; }
console.dir(B)
Object.setPrototypeOf(A.prototype, B.prototype) // 繼承B的公有
console.dir(A)const a = new A
console.log(a)

js設計模式

面向對象(OOP)

面向對象中的繼承

類組件

*es6 class語法

*類組件繼承原理

  1. 繼承了私有屬性 props context refs updater
  2. 繼承了公有屬性 isReactComponent setState forceUpdate
  3. super內部實現就是call繼承

class A{
    num = 100getNum=()=>{
        console.log(this.num)}sum = function(x,y){
        console.log(this.num)}add(){}
}
const a = new A
a.getNum()
a.sum()
console.log(a)

類組件第一次渲染底層邏輯

類組件和函數組件的區別:

會把此當做構造函數執行,創建一個實例,然后執行render

整體流程:

  1. 掛載props

  1. 初始化狀態:狀態就是state。setState & forceUpdate。

之后擴展state

setState是異步的,即時打印值沒有變。

forceUpdate

  1. 執行周期函數

  1. render
  2. componentDidMount

騰訊文檔-流程圖插件

類組件更新的底層邏輯

組件更新整體流程

騰訊文檔-流程圖插件

  • forceUpdate會跳過shoudUpdate

第二種組件更新的情況:父組件更新也會觸發子組件的更新

什么情況能讓組件更新?

  1. 修改狀態能讓組件更新
  2. 父組件更新

父組件自上而下渲染的時候,一定會遇到子組件先深度遞歸

騰訊文檔-流程圖插件

周期函數的命名特點:

基本component開頭,將要都是will,已完成都是did,

更新是update,掛載是mount,卸載是unmount

PureComponent和Component的區別

React.PureComponent

淺比較概念:對象至多比較一級

淺比較源碼比較

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

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

相關文章

開發、科研、日常辦公工具匯總(自用,持續更新)

主要記錄匯總一下自己平常會用到的網站工具,方便查閱。 update:2025/2/11(開發網站補一下) update:2025/2/21(補充一些AI工具,剛好在做AI視頻相關工作) update:2025/3/7…

requests中post中data=None, json=None兩個參數區別

在 requests.post() 方法中,data 和 json 主要用于發送請求體,但它們的作用和格式有所不同。 1. data 參數 用途:用于發送表單數據或原始二進制數據。格式: 可以是 字典(dict)(默認會編碼為 a…

51c大模型~合集10

我自己的原文哦~ https://blog.51cto.com/whaosoft/11547799 #Llama 3.1 美國太平洋時間 7 月 23 日,Meta 公司發布了其最新的 AI 模型 Llama 3.1,這是一個里程碑時刻。Llama 3.1 的發布讓我們看到了開源 LLM 有與閉源 LLM 一較高下的能力。 Meta …

架構演變 之 超市進化

1. 單機架構 → 小賣部(夫妻店) 場景:一個老板包攬所有工作——進貨、擺貨、收銀、打掃,店里只有一個小倉庫。對應架構:所有功能(數據庫、業務邏輯、頁面)都擠在一臺服務器上。問題&#xff1a…

ubuntu 和 RV1126 交叉編譯Mosqutiio-1.6.9

最近需要交叉編譯mosquitto,遇到一些小問題記錄一下。 1.眾所周知使用它自帶的Makefile編譯的時候,只需要在編譯前,指定它config.mk中的變量:CFLAGS頭文件路徑 和 LDFLAGS庫文件路徑就ok,例子如下: expor…

Photoshop 中如何快速摳圖?

Photoshop 中如何快速摳圖? 摳圖是 Photoshop 中的常見操作,無論是去除背景還是提取特定對象,都需要掌握高效的摳圖技巧。本文將介紹幾種快速摳圖的方法,幫助你輕松完成設計任務。 1. 快速選擇工具(Quick Selection T…

解決 React 中的 Hydration Failed 錯誤

解決 React 中的 Hydration Failed 錯誤 React 的 服務器端渲染(SSR)通過在服務器端生成 HTML 并將其發送給客戶端,幫助提高頁面加載速度和搜索引擎優化(SEO)。然而,在進行 SSR 后,React 需要進…

如何使用postman來測試接口

一、postman的介紹與下載 可參考: https://blog.csdn.net/freeking101/article/details/80774271 二、api獲取網站 阿里云API應用市場 地址:云市場_鏡像市場_軟件商店_建站軟件_服務器軟件_API接口_應用市場 - 阿里云 三、具體測試過程 可模擬瀏覽…

數據庫系統概論(二)數據模型

數據庫系統概論(二)數據模型 數據庫系統概論(二)數據模型前言一、數據建模二、概念模型三、數據模型的三要素四、層次模型五、網狀模型六、關系模型 總結(核心概念速記): 數據庫系統概論&#x…

清華同方國產電腦能改windows嗎_清華同方國產系統改win7教程

清華同方國產電腦能改windows嗎?清華同方國產電腦如果采用的是兆芯kx-6000系列或kx-7000系列以及海光c86 3250 3350 X86架構處理器可以安裝windows。在安裝win7時bios中要關閉“安全啟動”和開啟legacy傳統模式支持,如果是NVME接口的固態硬盤&#xff0c…

安卓Android與iOS設備管理對比:企業選擇指南

目錄 一、管理方式差異 Android Enterprise方案包含三種典型模式: Apple MDM方案主要提供兩種模式: 二、安全防護能力 Android系統特點: 三、應用管理方案 四、設備選擇建議 五、典型場景推薦 需求場景 推薦方案 六、決策建議要點…

再聊 Flutter Riverpod ,注解模式下的 Riverpod 有什么特別之處,還有發展方向

三年前我們通過 《Flutter Riverpod 全面深入解析》 深入理解了 riverpod 的內部實現,而時隔三年之后,如今Riverpod 的主流模式已經是注解,那今天就讓我們來聊聊 riverpod 的注解有什么特殊之處。 前言 在此之前,我們需要先回憶…

前端項目Axios封裝Vue3詳細教程(附源碼)

前端項目Axios封裝Vue3詳細教程(附源碼) 一、引言 在前端項目開發中,HTTP請求是不可或缺的一部分。Axios作為一個基于Promise的HTTP客戶端,因其易用性和豐富的功能而廣受歡迎。在Vue3項目中,合理地封裝Axios不僅可以提…

手寫一個Tomcat

Tomcat 是一個廣泛使用的開源 Java Servlet 容器,用于運行 Java Web 應用程序。雖然 Tomcat 本身功能強大且復雜,但通過手寫一個簡易版的 Tomcat,我們可以更好地理解其核心工作原理。本文將帶你一步步實現一個簡易版的 Tomcat,并深…

在 UniApp 開發的網站中使圖片能夠緩存,不一直刷新

在 UniApp 開發的網站中,要使圖片能夠緩存,不一直刷新,可以考慮以下幾種方法: 1. 使用適當的 HTTP 緩存頭 確保你的服務器在響應圖片時,返回合適的緩存控制 HTTP 頭。以下是一些常用的 HTTP 頭來控制緩存&#xff1a…

Makefile——make工具編譯STM32工程

一、Makefile相關指令 1.1、變量 符號含義替換追加:恒等于 1.2、隱含規則 符號含義%.o任意的.o文件*.o所有的.o文件 1.3、通配符 符號含義$^所有依賴文件$所有目標文件$<所有依賴文件的第一個文件 1.4、編譯器指令常用參數功能說明 符號含義舉例-E預處理&#xff0c;…

深入理解Linux文件系統權限:從基礎到高級應用全解析

1. 什么是文件系統權限&#xff1f;它是如何工作的&#xff1f; 文件權限的本質 想象你的電腦是一個大房子&#xff0c;每個文件和目錄都是房間里的物品。文件系統權限就像是一把鑰匙&#xff0c;決定誰能進房間、能看什么、能修改什么。 權限三要素&#xff1a; 讀&#xff…

C語言:6.22練習題數組解答

#include <stdio.h> #include <string.h> // 用于 strlen() int main() {char a[100];int j 0;// 從用戶輸入讀取字符串printf("請輸入一個字符串: ");fgets(a, sizeof(a), stdin);// 遍歷字符串中的每個字符for (int i 0; i < strlen(a); i) {if (…

一、docker的安裝

一、docker桌面 二、docker的配置文件 1、docker配置文件位置/etc/docker/daemon.json 使用json格式&#xff0c;graphdata-root {"graph":"/deploy/docker","registry-mirrors": ["https://8auvmfwy.mirror.aliyuncs.com"],"…

Matlab 多項式擬合點法線(二維)

文章目錄 一、簡介二、實現代碼三、實現效果一、簡介 這個思路其實很簡單,假設我們有一組曲線點,我們可以對其擬合曲線并計算其導數來獲取每個點的法向量,當然這一思路也可以擴展至三維。具體過程如下所示: 二、實現代碼 %% *********