首页 > 其他分享 >Zustand介绍与使用 React状态管理工具

Zustand介绍与使用 React状态管理工具

时间:2024-10-26 21:45:55浏览次数:7  
标签:Zustand const price 管理工具 React state useBookStore total any

在这里插入图片描述

文章目录

前言

在现代前端开发中,状态管理一直是一个关键的挑战。随着应用规模的扩大,组件间的状态共享变得愈加复杂。为了应对这一需求,开发者们逐渐寻找更加轻量、灵活的解决方案。在众多状态管理库中,Zustand 以其简洁易用的特点脱颖而出。

Zustand 是一个基于 React 的状态管理库,旨在提供简单而强大的状态管理功能。与传统的状态管理工具相比,Zustand 采用了更为直观的 API 设计,降低了学习成本,让开发者能够快速上手。它的核心理念是“最小化”,意味着你可以只为应用中需要的部分状态创建 store,而不是强迫使用全局状态,进而提高了应用的性能和可维护性。

Zustand 的优势还在于其灵活性。它允许开发者在不牺牲性能的前提下,使用多种方式管理状态,包括异步操作、持久化存储等。同时,Zustand 还支持中间件功能,如 immer 和 devtools,让状态更新变得更加简洁,并方便开发和调试。

在这篇文章中,我们将深入探讨 Zustand 的核心概念、使用方法以及它在实际开发中的应用案例。通过对 Zustand 的全面解析,期望能够帮助开发者在构建高效、可维护的 React 应用时,更好地利用这一强大的状态管理工具。

基本使用

编写状态加方法
import {create} from 'zustand'

const useBookStore = create<any>((set,get)=>({

price: 30,

total:100,

increment(){

set(( state:any ) => ({ total: state.total + 1 }));

},

decrement(){

set(( state:any ) => ({ total: Math.max(state.total - 1, 0) })); // 确保total不小于0

},

getTotal(){

return get().price * get().total

}

}))

export default useBookStore

在组件中使用
const Child1 =() => {

const price = useBookStore((state:any)=> state.price)

const total= useBookStore((state:any)=> state.total)

const increment = useBookStore((state:any) => state.increment )

const decrement = useBookStore((state:any) => state.decrement )

const getTotal = useBookStore((state:any)=> state.getTotal)

return (

<>

<h2>{price}</h2>

<h2>{total}</h2>

<h2>{getTotal()}</h2>

<button onClick={decrement}>decrement</button>

<button onClick={increment}>increment</button>

</>

)

}
异步方法操作
async bookPromotion(){

//使用Promise来模仿异步操作

let rate = await Promise.resolve(0.8);

set(( state:any )=>{

state.price *= rate

})

}

中间件

immer 简化不可变状态更新 不用每次都返回一个对象了

import {immer } from 'zustand/middleware/immer'

const useBookStore = create<any>()(immer((set,get)=>({

price: 40,

total:100,

increment(){

set(( state:any ) => { state.total += 1 });

},

decrement(){

set(( state:any ) => { Math.max(state.total -= 1, 0) }); // 确保total不小于0

},

getTotal(){

return get().price * get().total

},

async bookPromotion(){

//使用Promise来模仿异步操作

let rate = await Promise.resolve(0.8);

set(( state:any )=>{

state.price *= rate

})

}

})))

export default useBookStore

简化状态获取

使用解构赋值

const { price, total, increment, decrement, getTotal, bookPromotion } = useBookStore((state) => ({ price: state.price, total: state.total, increment: state.increment, decrement: state.decrement, getTotal: state.getTotal, bookPromotion: state.bookPromotion, }));
优化性能

Child1Child2 组件都使用了相同的状态管理商店(store),这意味着它们会共享相同的状态。当你在 Child1 中更新状态时,Child2 即使store没有发生变化也会跟着执行,因为它们都从同一个 store 中获取数据。这非常浪费性能
使用useShallow包裹

import { useShallow } from 'zustand/react/shallow'

import useBookStore from './zustand/index.tsx'
const Child1 =() => {

// const price = useBookStore((state:any)=> state.price)

// const total= useBookStore((state:any)=> state.total)

const increment = useBookStore((state:any) => state.increment )

const decrement = useBookStore((state:any) => state.decrement )

const getTotal = useBookStore((state:any)=> state.getTotal)

const bookPromotion= useBookStore((state:any)=> state.bookPromotion)

const {price,total} = useBookStore()

return (

<>

<h2>{price}</h2>

<h2>{total}</h2>

<h2>{getTotal()}</h2>

<button onClick={decrement}>decrement</button>

<button onClick={bookPromotion}>promotion</button>

<button onClick={increment}>increment</button>

</>

)

}

const Child2 = () => {

const {test} = useBookStore(useShallow((state:any) =>({ test: state.test})))

console.log(1,2,test)

return <h2>{test}</h2>

}

Redux DevTools插件

import {devtools}from "zustand/middleware"
{enable:true,name"bookstore"}

持久化保存

import create from 'zustand';

import { persist } from 'zustand/middleware';

  

// 创建一个持久化的 store

const useStore = create(persist(

(set) => ({

count: 0,

increase: () => set((state) => ({ count: state.count + 1 })),

decrease: () => set((state) => ({ count: state.count - 1 })),

}),

{

name: ###, // 存储的 key 名称

storage: create(()=> sessionStorage), // 可以选择使用 localStorage 或 sessionStorage
	  
partialize:(state) => ({key:value})
}

));

文章到这里就结束了,希望对你有所帮助。

标签:Zustand,const,price,管理工具,React,state,useBookStore,total,any
From: https://blog.csdn.net/weixin_63625059/article/details/143245112

相关文章

  • 了解React Native应用中的createNativeStackNavigator 组件
    createNativeStackNavigator是ReactNavigation库中的一个组件,专门用于在ReactNative应用中创建原生的堆栈导航器(StackNavigator)。这个组件允许你在应用中实现页面之间的导航,如从主页面跳转到详情页面,然后再返回主页面。与传统的JavaScript堆栈导航器相比,createNat......
  • 尚硅谷-react教程-求和案例-数据共享(下篇)-完成数据共享-笔记
    #1024程序员节|征文# public/index.html<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>redux</title></head><body><divid="root"><......
  • React--》掌握Valtio让状态管理变得轻松优雅
    Valtio采用了代理模式,使状态管理变得更加直观和易于使用,同时能够与React等框架无缝集成,本文将深入探讨Valtio的核心概念、使用场景以及其在提升应用性能中的重要作用,帮助你掌握这一强大工具,从而提升开发效率和用户体验。目录初识ValtioValtio基础使用代理与快照订阅与侦......
  • 项目管理工具“禅道”与bug相关
    一、禅道的介绍(1)定义禅道是一个项目管理工具,也是一个bug管理工具,还是一个用例管理工具。(2)作用:为了解决众多企业在管理中出现混乱,无序的现象,开发出来(3)来源:禅道属易软天创公司(4)禅道是集于产品管理,项目管理,测试管理于一身,同时包含事务管理,组织管理8众多功能,是中小企业管理的首先......
  • react 总结+复习+应用加深
    文章目录一、React生命周期1.挂载阶段(Mounting)补充2.更新阶段(Updating)3.卸载阶段(Unmounting)二、React组件间的通信交互1.父子组件通信2.兄弟组件通信三、React页面缓存机制应用1.使用`React.memo`进行组件缓存2.使用`shouldComponentUpdate`进行手动缓存控制3.......
  • fastdfs管理工具Go-fastdfs-web 安装教程
    Go-fastdfs-web安装教程安装步骤下载:前往官方下载页面下载所需版本,选择带或不带JRE的安装包。设置权限:给安装文件赋予执行权限,命令为chmod+xgoFastDfsWeb.sh。启动与停止:启动命令为./goFastDfsWeb.shstart,停止为stop,查看状态为status。配置与访问:默认端口为80......
  • 包管理工具-npm-yarn-cnpm-npx-pnpm
    代码共享方案◼我们已经学习了在JavaScript中可以通过模块化的方式将代码划分成一个个小的结构:在以后的开发中我们就可以通过模块化的方式来封装自己的代码,并且封装成一个工具;这个工具我们可以让同事通过导入的方式来使用,甚至你可以分享给世界各地的程序员来使用......
  • React项目搭建
    1.环境准备确保你的计算机上已安装以下工具:Node.js:React需要Node.js来运行和管理依赖。你可以从Node.js官网下载并安装最新版本。npm:Node.js安装后会自带npm(NodePackageManager),用于管理项目依赖。2.创建项目使用CreateReactApp是快速创建React应用的推荐方式。打开终......
  • 第9课—项目管理工具禅道
    一、禅道的介绍(1)定义禅道是一个项目管理工具,也是一个bug管理工具,还是一个用例管理工具。(2)作用:为了解决众多企业在管理中出现混乱,无序的现象,开发出来(3)来源:禅道属易软天创公司(4)禅道是集于产品管理,项目管理,测试管理于一身,同时包含事务管理,组织管理8众多功能,是中小企业管理的首先......
  • 目前有哪些好用的缺陷管理工具
    目前有好用的缺陷管理工具有:一、Jira;二、Bugzilla;三、Redmine;四、MantisBT;五、YouTrack;六、Trello;七、Worktile。Jira具备高度的可定制性,可以根据团队的需求和流程进行配置,同时还支持与其他开发工具的集成。一、JiraJira是一款由澳大利亚公司Atlassian开发的知名缺陷管理工具......