成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

30行代碼,實(shí)現(xiàn)超火狀態(tài)管理工具 Zustand(43k star)

開發(fā)
什么是按需重渲染?就比如當(dāng) count 變化時,只有需要使用到 count 的組件才會重新渲染,沒用到 count 的就不用重渲染,減少不必要的渲染

zustand

zustand 是一個 React 的輕量級狀態(tài)管理工具庫,用起來非常方便,不僅支持多模塊創(chuàng)建狀態(tài)管理,還可以使用 hook + selector 的方式,在組件內(nèi)去獲取所需的狀態(tài)變量,我個人是感覺跟 Vue Pinia 有點(diǎn)相似,以下是一個簡單的小例子,展示 zustand 的基本使用~

點(diǎn)擊按鈕的時候,會通過 increase方法去修改狀態(tài)管理內(nèi)部的 count。

按需重渲染

什么是按需重渲染?就比如當(dāng) count 變化時,只有需要使用到 count 的組件才會重新渲染,沒用到 count 的就不用重渲染,減少不必要的渲染~

就比如我按了按鈕之后,只有 Counter 這個組件會重渲染,而 App 卻不會:

因?yàn)?nbsp;count 只被 Counter 組件所選擇到了,所以當(dāng)count變化時,Counter 會重渲染:

源碼實(shí)現(xiàn)

實(shí)現(xiàn) create:

我們可以借著上面的代碼例子,來一步步實(shí)現(xiàn) zustand 的源碼,先把引入的代碼給注釋掉,接下來我們自己來實(shí)現(xiàn) create。

其實(shí) zustand的源碼量非常至少,并且也很容易讀懂,無非就分成幾步:

(1) 聲明一個 create 函數(shù),用來創(chuàng)建狀態(tài)管理

(2) 維護(hù)一個狀態(tài)管理 state,用來存放狀態(tài)變量

(3) 聲明兩個函數(shù) set、get,一個是設(shè)置

(4) 維護(hù)一個訂閱集合 subscribe,收集訂閱方,且當(dāng) set的時候,通知 subscribe 中的所有訂閱方

(5) 準(zhǔn)備一個 hooks 返回給使用者,并且需要準(zhǔn)備一些材料,包括set、get、訂閱入口

以上就實(shí)現(xiàn)了 create這個函數(shù)~

實(shí)現(xiàn) _useStore

接下來實(shí)現(xiàn) _useStore,其實(shí)他就做一件事:對比一下被選擇的值,對比他修改前后是否相等,不相等的話就強(qiáng)制重渲染本組件。

強(qiáng)制重渲染可以巧妙借助useReducer這個內(nèi)置 hooks 來實(shí)現(xiàn)::

達(dá)到效果

現(xiàn)在已經(jīng)達(dá)到了我們想要的效果了~

并且當(dāng) count 變化時,也只會重渲染 Counter 組件~

代碼優(yōu)化

其實(shí) _useStore的代碼還可以再優(yōu)化一些,我們可以借助 React 的內(nèi)置 hooks,useSyncExternalStore 來簡化我們的代碼

這個 hooks 會自動傳一個比較函數(shù)給 subscribe,并且第二個參數(shù)函數(shù)返回的值改變時,會觸發(fā)這個比較函數(shù)~

責(zé)任編輯:趙寧寧 來源: 前端之神
相關(guān)推薦

2024-08-19 08:48:49

代碼渲染組件

2022-06-15 15:09:48

管理工具

2022-07-18 15:48:43

數(shù)據(jù)庫開源工具

2021-02-03 14:04:52

k8spermissionm管理工具

2011-08-12 10:38:09

MongoDB

2021-12-16 08:47:56

Vue3 插件Vue應(yīng)用

2010-01-15 22:29:11

2020-10-30 11:18:47

網(wǎng)絡(luò)技術(shù)工具

2020-09-30 14:05:22

網(wǎng)絡(luò)管理

2009-04-24 21:13:45

服務(wù)器虛擬化Vmware

2012-12-06 11:31:40

虛擬化

2012-04-09 09:43:49

云計(jì)算云管理

2014-03-28 11:15:42

phpmyadminMySQL管理

2012-03-01 10:04:02

虛擬化云計(jì)算混合云

2022-05-06 12:04:24

Ansible管理工具

2013-07-15 15:00:26

項(xiàng)目管理工具

2013-07-17 09:54:17

2021-03-04 12:55:01

systemd進(jìn)程管理工具Linux

2022-08-03 08:02:46

PDM工具Python

2023-03-07 14:21:57

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 久久国产精品一区 | 不卡视频一区二区三区 | 日韩第一夜 | 国产精品日日做人人爱 | 国产精品一区二区欧美黑人喷潮水 | 国产精品免费观看视频 | 成人精品免费视频 | 久久亚洲一区 | 搞av.com | 91精品国产乱码久久蜜臀 | www.av在线| 久久久久久久久久久久久久国产 | 亚洲福利视频一区二区 | 中文字幕一区在线 | 成人av看片 | 久久久久久国产精品 | 一区视频 | 欧美性猛交一区二区三区精品 | 欧美激情视频网站 | 精品国产91乱码一区二区三区 | 精品在线观看一区 | 亚洲精品久久久一区二区三区 | 亚洲国产一区二区视频 | 欧美一区二区在线观看 | a在线免费观看视频 | 亚洲国产成人精品女人久久久野战 | 亚洲一区二区三区四区五区中文 | 日韩三区 | 黄色欧美在线 | 亚洲国产一区二区三区在线观看 | 日韩欧美在线视频一区 | 国产精品一区二区福利视频 | 麻豆久久久9性大片 | 欧美男人天堂 | 国产一级黄色网 | 欧美中文字幕一区二区 | 99精品欧美一区二区三区 | 日韩在线观看中文字幕 | 欧美乱大交xxxxx另类电影 | 国产一级片在线观看视频 | 成人国产精品久久 |