React setState

老生常談之setState 是同步的還是異步的?

設想setState是同步的,那也就是每次調用setState都要進行新舊虛擬DOM的對比,然后將差異化的dom更新到頁面上,性能損耗很大

所以react把setState設置為了異步,當狀態更新時不能立即拿到更新后的狀態,而是批量進行更新

調用setState之后React都做了什么

首先上圖

上圖就是setState執行后的react所做的事情

1、enqueueSetState?方法將傳入的狀態放到組件的狀態隊列里面

2、enqueueUpdate?來處理將要更新的實例對象

3、enqueueUpdate在處理組件實例時,會先判讀啊batchingStrategy對象中isBatchingUpdates是true還是false

4、如果是true,說明組件正在批量更新,任何需要更新的組件需要進入dirtyComponents隊列進行等待

5、如果是false,就正常進行批量更新

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

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

相關文章

【Unity2D 2022:Audio】添加游戲音樂和音效

一、添加背景音樂 1. 創建空的游戲物體,名為BackgroundMusic 2. 為音頻播放器添加音頻源(Audio Source)組件 3. 將背景音樂音頻賦值到AudioClip(紅色) 4. 設置循環播放(藍色) 二、添加草莓拾取…

springboot封裝請求參數json的源碼解析

源碼位置: org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver#readWithMessageConverters(org.springframework.http.HttpInputMessage, org.springframework.core.MethodParameter, java.lang.reflect.Type…

解答 | http和https的區別,誰更好用

TTP(超文本傳輸協議)和HTTPS(安全超文本傳輸協議)的主要區別在于安全性和數據傳輸的方式。 一、區別 1、協議安全性: HTTP:使用明文形式傳輸數據,不提供數據加密功能,數據在傳輸過…

coze搭建工作流和Agent

coze搭建工作流和Agent Agent LLM 記憶感知規劃使用工具 LLM是大語言模型,prompt提示詞影響LLM的輸出質量 描述需求——>背景——>解決思路,提示詞文檔。 當有明確的需求和實現需求的路徑時,可以通過搭建工作流來完成標準化任務為…

函數聲明與函數表達式的區別?

一、區別如下: 函數聲明的方法定義的函數,函數名是必須的,函數表達式的函數名是可選的。函數聲明的方法定義的函數,函數可以在函數聲明之前調用,函數表達式的函數只能在聲明之后調用。 函數聲明的方法定義的函數并不是真正的聲明,它們僅僅可以出現在全局中,或者嵌套在其他的函數…

Python爬蟲原理以及3個小案例(源碼)

一、爬蟲原理 網絡爬蟲是一種用于自動獲取網頁內容的程序。它模擬用戶瀏覽網頁的過程,通過發送HTTP請求獲取網頁的源代碼,并利用解析和提取技術來獲取所需的數據。 1. HTTP請求與響應過程 爬蟲向目標網站發送HTTP請求,請求包含URL、請求方…

Linux內核 -- DMA控制器之dmaengine框架的注冊與使用流程

Linux Kernel dmaengine 框架 簡介 Linux內核的dmaengine框架是一個用于管理DMA(Direct Memory Access)操作的通用框架。它抽象了不同DMA控制器的實現,使得上層代碼可以方便地進行DMA傳輸。 初始化流程 1. 驅動注冊 每個DMA控制器驅動都…

定義變量和聲明變量、定義類和聲明類

一、定義變量和聲明變量 在編程中,定義變量和聲明變量是兩個相關但不同的概念,尤其是在靜態類型的編程語言中。靜態類型的編程語言比如Java 1、聲明變量 (1)定義:聲明變量是指告訴編譯器變量的名字、類型和在某些情…

Mysql:時區問題

Mysql:時區問題 1、時區配置 Mysql默認使用系統的時區 mysql> show global variables like %time%zone%; -------------------------- | Variable_name | Value | -------------------------- | system_time_zone | | | time_zone | SYSTEM…

Multi-Wing Optimiser風扇選型軟件介紹

Multi-Wing Optimiser風扇選型軟件

一、YOLO V10安裝、使用、訓練大全

YOLO V10安裝、使用、訓練大全 一、下載官方源碼二、配置conda環境三、安裝YOLOV10依賴四、使用官方YOLO V10模型1.下載模型2.使用模型2.1 圖片案例 五、制作數據集1.數據集目錄結構2.標注工具2.1 安裝標注工具2.2 運行標注工具2.3 設置自動保存2.4 切換yolo模式2.5 開始標注2.…

Socket.D 開源網絡應用協議,v2.5.9 發布(已有 java, py, js SDK)

Socket.D 協議? Socket.D 是一個基于事件和語義消息流的網絡應用協議。在微服務、移動應用、物聯網等場景,可替代 http、websocket 等。協議詳情參考《官網介紹》。 支持: tcp, udp, ws, kcp 傳輸。 目前:java,kotli…

Python不使用元類的ORM實現

不使用元類的簡單ORM實現 在 Python 中,ORM(Object-Relational Mapping)是一種將對象和數據庫之間的映射關系進行轉換的技術,使得通過面向對象的方式來操作數據庫更加方便。通常,我們使用元類(metaclass&a…

關于go和rust語言的對比

文章目錄 前言Rust 的優勢:Go 的優勢:總結 前言 Go 和 Rust 是兩種現代的系統級編程語言,它們各自擁有獨特的特性和應用場景。以下是它們的一些主要區別: Rust 的優勢: 內存安全:Rust 引入了所有權和借用…

香橙派5plus上跑云手機方案二 waydroid

前言 上篇文章香橙派5plus上跑云手機方案一 redroid(帶硬件加速)說了怎么跑帶GPU加速的redroid方案,這篇說下怎么在香橙派下使用Waydroid。 溫馨提示 雖然能運行,但是體驗下來只能用軟件加速,無法使用GPU加速,所有會很卡。而且…

Pat乙級題解

文章目錄 1~2021 ~ 4041~6061~8081~100101~125 1~20 1001 害死人不償命的(3n1)猜想 B1002 寫出這個數 (20 分) B1003 我要通過! B1004 成績排名 1005 繼續(3n1)猜想 B1006 換個格式輸出整數 B1007 素數對猜想 1008 數組元素循環右移問題 B1009 說反話 1010 一元多項…

linux磁盤分區管理

首先關機狀態下,先配置硬盤 硬盤分區管理 識別硬盤 》分區規劃 》 格式化 》 掛載使用 [rootlocalhost ~]# lsblk 查看硬盤 分區劃分(m幫助, p 查看分區, n 創建分區, d 刪除分區, q 退出, w 保存, g gpt分區) [roo…

絕區陸--大語言模型的幻覺問題是如何推動科學創新

介紹 大型語言模型 (LLM)(例如 GPT-4、LLaMA-2、PaLM-2、Claude-2 等)已展示出為各種應用生成類似人類文本的出色能力。然而,LLM 的一個鮮為人知的方面是它們傾向于“產生幻覺”或生成不正確或沒有根據的事實陳述。我不認為這僅僅是一個限制…

快速排序算法Python實現

快速排序原理和步驟 快速排序是一種高效的排序算法,基于分治法(Divide and Conquer)來實現。其基本思想是通過一次排序將數組分成兩部分,其中一部分的所有元素都小于另一部分,然后遞歸地對這兩部分進行排序。以下是快…

前端構建工具(webpackvite)

這里寫目錄標題 構建工具webpack介紹配置文件簡介entryoutputloaderbabel插件開發服務器(webpack-dev-server)soureMap vite 構建工具 當我們習慣了在node中編寫代碼的方式后,在回到前端編寫html、css、js這些東西會感覺到各種的不便。比如:…