react狀態管理庫 - zustand

?什么是zustand?

? ? ? zustand 是一個輕量級、快速且可擴展的 React 狀態管理庫,旨在提供一種簡單直接的方式來管理應用狀態,而無需其他解決方案通常伴隨的繁瑣代碼。根據官方 Zustand 文檔,Zustand 是“一個使用簡化 flux 原理的小型、快速且可擴展的精簡狀態管理解決方案”。它允許開發者創建包含狀態和操作的 store,這些 store 可以通過 React hooks 進行訪問和更新。

中文官網?

Zustand 中文網

安裝

npm install zustand

基礎使用

創建store
import { create } from 'zustand'const useStore = create((set) => ({  //set是用來修改數據的專門方法,必須調用它來修改數據//狀態數據  bears: 0,//修改方法increasePopulation: () => set((state) => ({ bears: state.bears + 1 })), //加一removeAllBears: () => set({ bears: 0 }),//置0updateBears: (newBears) => set({ bears: newBears }),//接收傳遞的值并賦值
}))
export default useStore
綁定組件并使用

import useStore from '../../zustand'
const Month = () => {const bears = useStore((state) => state.bears)const { increasePopulation, removeAllBears, updateBears } = useStore()return (<div> {bears}<button onClick={increasePopulation}>加一</button><button onClick={removeAllBears}>置0</button><button onClick={()=>updateBears(3)}>傳值</button></div>)
};
export default Month;

異步使用

異步實現接口請求更改數據?
import axios from 'axios'
import { create } from 'zustand'const useStore = create((set) => ({listData:[],changeList:async()=>{let res =await axios.get('https://api.taolale.com/api/xjj/get?key=KadadfdgfdhhjGEK')set({listData:res.data.data})}}))
export default useStore
?組件調用

import useStore from '../../zustand'
const Month = () => {const list = useStore((state) => state.listData)const { changeList} = useStore()return (<div> {list}<button onClick={changeList}>獲取數據</button></div>)
};
export default Month;

切片模式(模塊化)

拆分模塊,在組合起來?

場景:當單個store比較大的時候,可以采用切片模式進行模塊拆分組合,類似于模塊化

模塊一? createBearSlice.js
const createBearSlice = (set) => ({bears: 0,addBear: () => set((state) => ({ bears: state.bears + 1 })),eatFish: () => set((state) => ({ fishes: state.fishes - 1 })),
})
export default createBearSlice
模塊二??createFishSlice.js
const createFishSlice = (set) => ({fishes: 0,addFish: () => set((state) => ({ fishes: state.fishes + 1 })),
})
export default createFishSlice
組合模塊? index.js

import { create } from 'zustand'
import  createBearSlice from './createBearSlice'
import  createFishSlice from './createFishSlice'const useBoundStore = create((...a) => ({...createBearSlice(...a),...createFishSlice(...a),
}))
export {useBoundStore}
?組件使用? 直接解構使用

import { useBoundStore } from './store/index'
const Month = () => {const { bears,fishes,addBear} = useBoundStore()return (<div> {fishes}{bears}<button onClick={addBear}>加一</button></div>)
};
export default Month;

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

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

相關文章

粗排樣本架構升級:融合LTR特征提升模型性能的技術實踐

粗排樣本架構升級&#xff1a;融合LTR特征提升模型性能的技術實踐 ——基于PySpark的樣本構建與特征工程深度解析 一、粗排系統的定位與技術演進 在推薦系統級聯架構中&#xff0c;?粗排&#xff08;Rough Ranking&#xff09;?? 承擔著關鍵過渡角色&#xff1a;從召回層獲…

CCF-GESP 等級考試 2025年6月認證C++四級真題解析

1 單選題&#xff08;每題 2 分&#xff0c;共 30 分&#xff09;第1題 在C中&#xff0c;聲明一個指向整型變量的指針的正確語法是&#xff08; &#xff09;。A. int* ptr; B. *int ptr; C. int ptr*; D. ptr …

PlantUML 在 IDEA 中文版中的安裝與使用指南

目錄 摘要 一、安裝 PlantUML 插件 二、配置 PlantUML 運行環境 三、創建 PlantUML 文件 四、編寫 PlantUML 代碼 五、生成并查看圖表 六、自動生成類圖&#xff08;重點新增&#xff09; 6.1 從 Java 類生成類圖 6.2 類圖語法詳解 6.3 類圖高級技巧 七、常見問題及…

創客匠人:創始人 IP 打造中 “放下身段” 的深層邏輯

在 IP 經濟火熱的當下&#xff0c;無數創始人投身 IP 打造&#xff0c;卻鮮少有人意識到&#xff1a;真正能實現 IP 變現的核心&#xff0c;并非專業知識的堆砌&#xff0c;而是與用戶建立 “可交往” 的連接。創客匠人通過多年服務 IP 的實踐發現&#xff0c;那些穿越周期的創…

C語言<數據結構-鏈表>

鏈表是一種常見且重要的數據結構&#xff0c;在 C 語言中&#xff0c;它通過指針將一系列的節點連接起來&#xff0c;每個節點可以存儲不同類型的數據。相比數組&#xff0c;鏈表在插入和刪除元素時不需要移動大量數據&#xff0c;具有更好的靈活性&#xff0c;尤其適合處理動態…

基于Matlab多特征融合的可視化指紋識別系統

針對中小規模&#xff08;百級&#xff09;指紋模板庫中常見的脊線斷裂、噪聲干擾以及結果缺乏可解釋性等難點&#xff0c;本文提出并實現了一種基于多特征融合的可視化指紋識別系統。系統整體采用模塊化設計&#xff1a;在預處理階段&#xff0c;先通過改進的灰度歸一化與局部…

50天50個小項目 (Vue3 + Tailwindcss V4) ? | DoubleVerticalSlider(雙垂直滑塊)

&#x1f4c5; 我們繼續 50 個小項目挑戰&#xff01;—— DoubleVerticalSlider組件 倉庫地址&#xff1a;https://github.com/SunACong/50-vue-projects 項目預覽地址&#xff1a;https://50-vue-projects.vercel.app/ 使用 Vue 3 的 Composition API&#xff08;<scrip…

mysql join語句、全表掃描 執行優化與訪問冷數據對內存命中率的影響

文章目錄join執行邏輯Index Nested_Loop Join&#xff08;NLJ&#xff09;MMR(Mutli-Range Read) 優化BKA(Batched Key Access)算法Simple Nested_Loop JoinBlock Nested-Loop Join&#xff08;BLJ&#xff09;join buffer 一次放不下 驅動表join buffer優化的影響&#xff1a;…

【LeetCode100】--- 1.兩數之和【復習回滾】

題目傳送門 解法一&#xff1a;暴力枚舉&#xff08;也是最容易想到的&#xff09; class Solution {public int[] twoSum(int[] nums, int target) {int n nums.length;for(int i 0; i < n; i){for(int j i1; j<n; j){if(nums[i] nums[j] target){return new int…

opencv提取png線段

import cv2 import matplotlib.pyplot as plt import numpy as np# 讀取圖像 image cv2.imread(./data/1.png) if image is None:print("無法讀取圖像文件") else:# 轉換為灰度圖像gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 使用Canny邊緣檢測edges cv2.Can…

計算機網絡:概述層---計算機網絡概念解析

計算機網絡的概念詳解 &#x1f4c5; 更新時間&#xff1a;2025年07月6日 &#x1f3f7;? 標簽&#xff1a;計算機網絡 | 網絡基礎 | 互聯網 | TCP/IP | 路由器 文章目錄前言一、計算機網絡的發展歷程二、什么是計算機網絡&#xff1f;1. 計算機網絡的基本功能2. 計算機網絡的…

springMVC04-Filter過濾器與攔截器

一、Filter&#xff08;過濾器&#xff09;和 Interceptor&#xff08;攔截器&#xff09;在 SpringMVC 中&#xff0c;Filter&#xff08;過濾器&#xff09;和 Interceptor&#xff08;攔截器&#xff09;都是對請求和響應進行預處理和后處理的重要工具&#xff0c;但它們存在…

STM32第十九天 ESP8266-01S和電腦實現串口通信(2)

1&#xff1a;UDP 傳輸UDP 傳輸不不區分 server 或者 client &#xff0c;由指令 ATCIPSTART 建?立傳輸。 1. 配置 WiFi 模式 ATCWMODE3 // softAPstation mode 響應 : OK 2. 連接路路由器? ATCWJAP"SSID","password" // SSID and password of router 響…

大健康IP如何用合規運營打破“信任危機”|創客匠人

一、行業亂象下的信任裂痕當前大健康領域私域直播亂象頻發&#xff0c;部分機構利用“假專家義診”“限量搶購”等話術&#xff0c;將低成本保健品高價賣給老人&#xff0c;甚至有技術公司提供“全鏈路坑老方案”&#xff0c;加劇行業信任危機。這種短視行為不僅損害消費者權益…

MySQL(122)如何解決慢查詢問題?

解決慢查詢問題通常涉及到多種技術和方法&#xff0c;以確保數據庫查詢的高效性和響應速度。以下是詳細步驟和示例代碼&#xff0c;闡述如何解決慢查詢問題。 一. 慢查詢的常見原因 缺少索引&#xff1a;查詢未使用索引或索引未優化。查詢不當&#xff1a;查詢語句本身書寫不合…

esp32在vscode中仿真調試

此方法可以用在具有usb serial jtag功能的esp32芯片用&#xff0c;支持型號&#xff1a; ESP32-C3 ESP32-S3 ESP32-C6 ESP32-H2 ESP32-C5 USB Serial JTAG功能介紹&#xff1a; 從硬件角度&#xff1a; 它是ESP32芯片內置的硬件功能 不是一個獨立的物理接口 是通過USB接口實…

藍橋云課 矩形切割-Java

目錄 題目鏈接 題目 解題思路 代碼 題目鏈接 競賽中心 - 藍橋云課 題目 解題思路 找最大的正方形就是大邊-n個小邊&#xff0c;直至相等或者小于1 代碼 import java.util.Scanner; // 1:無需package // 2: 類名必須Main, 不可修改public class Main {public static voi…

PostgreSQL 鎖等待監控,查找等待中的鎖

直接貼SQLWITH RECURSIVE l AS (SELECT pid, locktype, mode, granted, ROW(locktype,database,relation,page,tuple,virtualxid,transactionid,classid,objid,objsubid) objFROM pg_locks ), pairs AS (SELECT w.pid waiter, l.pid locker, l.obj, l.modeFROM l wJOIN l ON l.…

Elasticsearch 字符串包含子字符串:高級查詢技巧

作者&#xff1a;來自 Elastic Justin Castilla 想要獲得 Elastic 認證&#xff1f;看看下一次 Elasticsearch Engineer 培訓什么時候開始吧&#xff01; Elasticsearch 擁有大量新功能&#xff0c;可以幫助你為你的使用場景構建最佳的搜索解決方案。深入了解我們的示例 noteb…

Vue、Laravel 項目初始化命令對比 / curl 命令/ CORS 機制總結與案例

前言一個疑問衍生出另一個疑問再衍生出又一個疑問&#xff0c;于是有了這篇文章。一、Vue 項目初始化命令 基于 Vite 創建 Vue 項目 命令&#xff1a;npm create vitelatest my-project -- --template vue適用場景&#xff1a;需輕量級、高速開發環境關鍵點&#xff1a;使用 Vi…