React setState原理

異步更新

在這里插入圖片描述

原因

1設置為異步提升性能 如果setState每次調用直接執行,會造成 render 函數被頻繁執行 ,頁面重新被渲染 解決:異步批處理

2如果render函數未執行時,保證props和state一致性

拿到最新state的方法

法一:setState()中第二個數據是一個回調函數,通過這個回調函數拿到最新的數據

法二:componentDidUpdate()獲取到最新的數據

先執行聲明周期函數在執行回調函數的

在版本17之前有同步更新

情況一:在setTimeout()中

情況二:在原生dom事件中

在這里插入圖片描述

進行合并

在這里插入圖片描述

輸出的值為1 僅進行一次加1操作

如何避免:使用函數式更新

在這里插入圖片描述

原因:在setState源碼中進行判斷,是函數的話會進行call方法的調用,不是進行合并

React的更新機制

JSX => 虛擬dom =>真實dom

更新 state或者props改變 => render函數重新執行 => 比較新舊虛擬dom樹的差別 =>做出更新

diff算法 將比較兩顆樹的時間復雜度優化到了O(n)的數量級

1.同級比較,不夸層 2。類型不同直接刪除 3.引入key值‘

key值 尾插時性能優化不大,在中間插入時引入key值用來匹配確定唯一元素

在這里插入圖片描述

嵌套組件的render被調用 父組件渲染引起子組件更新

解決方法 更新階段函數 shouldComponentUpdate

// 阻斷更新函數shouldComponentUpdate(nextProps,nextState){if(this.state.counter!=nextState.counter){return true}return false}

在這里插入圖片描述

每個類里都需要 手寫shouldComponentUpdate()函數

解決方法 類組件繼承PureComponent 會自動進行淺比較生成shouldComponentUpdate

原理:更新時shouldCompenontUpdate決定組件是否在render時更新

源碼里面判斷是否用戶自己定義了compenontUpdate函數

而在pureComponent中如果繼承自這個,沒有走上面的流程而是進行一次淺比較

在這里插入圖片描述
進行state和props的淺層比較 如果沒有的話就不更新 return false

函數組件如何避免重復調用嗎 memo 和 usememo一起去使用

作用:當函數props改變時才去重新渲染 ,可以傳入一個自己的compare比較函數,默認淺層比較

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

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

相關文章

漢代大模型:歷史鏡像與智能重構的深度對話

引言:當歷史遇見人工智能 一件漢代陶俑的三維模型正通過增強現實技術向觀眾演繹農耕場景。這個看似尋常的文物活化案例,實則蘊含著人工智能與歷史學交叉領域的前沿探索——漢代大模型。作為連接過去與未來的智能載體,漢代大模型不僅重構了我…

es向量檢索里的efSearchc參數是干嘛用的

在Elasticsearch的向量檢索中,ef_search(或efSearch)是控制HNSW近似最近鄰(ANN)搜索精度與性能平衡的關鍵參數,其作用機制和影響如下: 🛠? 一、核心作用 ef_search 限制底層圖遍歷…

Mac SSH終端操作工具 SecureCRT

SecureCRT Mac 是一款SSH終端工具,為計算專業人士提供高級會話管理工具。 也是一個功能強大且值得信賴的基于GUI的SHH和Telnet客戶端,以及旨在提高工作效率并簡化重復任務的終端仿真器。 借助SecureCRT mac版的幫助,您可以通過對ANSI&#…

UE5關卡快照

關卡快照(Level Snapshots) 使你能夠在關卡的 世界大綱視圖(World Outliner) 中保存 Actors 的特定配置,并立即將場景恢復到該狀態。這樣可以大幅簡化復雜的設置,并避免對不同場景同一關卡的多個變體進行復…

Maven 或 Gradle 下載和添加 jar 文件的步驟

使用 Maven 或 Gradle 來自動下載和添加 jar 文件是管理 Java 項目依賴的最佳方式。 以下是如何使用 Maven 和 Gradle 來自動下載和添加 jar 文件的步驟: 使用 Maven # 創建一個 Maven 項目: mvn archetype:generate -DgroupIdcom.example -Dartifact…

JVM對象創建全流程解析

一、JVM對象創建流程 Ⅰ、類加載檢查——JVM創建對象時先檢查類是否加載 在虛擬機遇到new指令時,比如new關鍵字、對象克隆、對象序列化時,如下字節碼 0: new #2 // class com/example/demo/Calculate檢查指令的參數&#x…

深度學習從入門到精通:PyTorch實戰與核心原理詳解

掌握深度學習核心概念,玩轉PyTorch框架,從理論到實戰一站式學習指南 🚀 一、深度學習全景圖 🌟 人工智能金字塔 🔍 深度學習核心優勢 ??優勢????劣勢????適用場景??自動特征提取依賴大數據圖像識別&…

計算機網絡期末 物理層

目錄 數據通信基礎(理解) 傳輸介質(熟悉) 基帶傳輸(熟悉) 數字編碼(熟悉) 頻帶傳輸與調制解調(理解) 多路復用技術(了解) 物理層設備與極限速率(掌握) 數據通信基礎(理解) 一堆概念 通信的類型 同步技術 傳輸介質(熟悉) 有線介質 同軸電纜 雙絞線 光纖 無線介質 無線電…

力扣-139.單詞拆分

題目描述 給你一個字符串 s 和一個字符串列表 wordDict 作為字典。如果可以利用字典中出現的一個或多個單詞拼接出 s 則返回 true。 注意:不要求字典中出現的單詞全部都使用,并且字典中的單詞可以重復使用。 class Solution {public boolean wordBrea…

LeetCode-1679. K 和數對的最大數目

給你一個整數數組 nums 和一個整數 k 。 每一步操作中,你需要從數組中選出和為 k 的兩個整數,并將它們移出數組。 返回你可以對數組執行的最大操作數。 地址:https://leetcode.cn/problems/max-number-of-k-sum-pairs/description/?envTyp…

相機camera開發之差異對比核查四:測試機和對比機的Camera動態參數差異對比及關鍵字

【關注我,后續持續新增專題博文,謝謝!!!】 上一篇我們講了: 這一篇我們開始講: 目錄 一、背景 二、:Camera動態參數差異 2.1:動態參數差異核查項 2.2 :動態參數差異核查關鍵字 2.3 :前置普通拍照動態參數 2.4 :后置普通拍照動態參數 2.5 :后置人像模式…

ModbusTCP轉Profibus網關在配料系統中的配置實踐

在現代飼料企業的生產過程中,自動化技術的應用日益廣泛。其中,ModbusTCP和Profibus是兩種常見的工業通信協議,它們在數據采集和設備控制方面發揮著重要作用。然而,由于這兩種協議在技術上的差異,直接互通往往存在困難。…

雙饋風機分段控制策略的一次調頻模型深度解析

雙饋風機分段控制策略的一次調頻模型深度解析 摘要 隨著風電滲透率的急劇攀升,電力系統慣性降低與一次調頻能力弱化問題日益凸顯。雙饋感應發電機(DFIG)憑借其優越的性能已成為主流機型,但其常規控制策略使其自然不具備響應系統頻率變化的能力。本文深入探討基于分段控制策…

JMeter 高階玩法:分布式壓測的技術核心技術要點

在2025年的數字化浪潮中,網站和應用的性能直接決定用戶體驗和業務成敗!想象一下,雙十一促銷期間,你的電商平臺因無法承受高并發而崩潰,或者金融系統在高峰期響應遲緩——這不僅是技術問題,更是商業災難&…

在 Windows 和 Linux 下使用 C/C++ 連接 MySQL 的詳細指南

前言 MySQL 是一種流行的關系型數據庫管理系統,廣泛應用于各種應用程序中。C/C 作為高性能編程語言,常被用于需要與數據庫交互的開發中。下面詳細講解如何在 Windows 和 Linux 平臺下使用 C/C 連接 MySQL 數據庫,幫助你快速上手。 準備工作 …

【人工智能基礎】初識神經網絡

初識神經網絡 本章通過戰勝人類圍棋世界冠軍的AlphaGo案例,介紹神經網絡的基本概念,并闡明其與人工智能、機器學習的關系。 1. AlphaGo與圍棋:神經網絡的實力展示 傳統圍棋程序:基于固定規則 早期的計算機程序依賴人類專家預先設定的策略(“如果A情況發生,則執行B步驟”…

ffmpeg webm 透明通道視頻轉成rgba圖片

import subprocess def webm_to_bgrapng(webm_video_path,bgra_dir):command [ffmpeg,-vcodec, libvpx-vp9, # 指定輸入視頻編碼為 VP9-i, webm_video_path, # 輸入視頻路徑-pix_fmt, "rgba", # 輸出 RGBA 格式(保留 Alpha 通道)bgra_dir …

SQLite 數據庫操作完整指南

SQLite 數據庫操作完整指南 全面的 SQLite 數據庫操作手冊,涵蓋從基礎操作到高級優化的所有內容 目錄 ** SQLite 簡介與特點 創建和連接數據庫 創建表 數據類型和約束 插入數據 查詢數據 更新數據 刪除數據 多表查詢 視圖 索引優化 觸發器 事務處理 全文搜索 JSO…

Python Luigi 【工作流管理庫】簡介

想全面了解DeepSeek的看過來 【包郵】DeepSeek全攻略 人人需要的AI通識課 零基礎掌握DeepSeek的實用操作手冊指南【限量作者親筆簽名版售完即止】 玩轉DeepSeek這本就夠了 【自營包郵】DeepSeek實戰指南 deepseek從入門到精通實用操作指南現代科技科普讀物AI普及知識讀物人工智…

微服務中分布式事務:Saga模式、TCC模式與消息隊列

Saga模式 Saga模式是一種基于補償的事務管理機制,它將一個長事務分解為多個本地事務,每個本地事務都有一個對應的補償事務。當某個本地事務執行失敗時,Saga模式會依次調用前面已成功執行的本地事務的補償事務,以實現事務的回滾。…