react 中的Zustand的store使用

这个react 中的store 就跟vue中的pinia 是差不多的使用方法

  • create<ThemeState>:创建一个 Zustand store,并用 TypeScript 接口约束 store 的形状。

  • (set) => ({ ... }) :回调函数,set 用于更新状态。

  • 返回值 :对象包含状态theme)和修改状态的方法setThemetoggleTheme)。

    • setTheme:直接设置新主题。set({ theme }) 会合并新状态。

    • toggleTheme:基于当前状态切换。set((state) => ({ theme: ... })) 使用函数式更新。

      import { create } from 'zustand';

      type Theme = 'light' | 'dark';

      interface ThemeState {
      theme: Theme;
      setTheme: (theme: Theme) => void;
      toggleTheme: () => void;
      }

      export const useThemeStore = create((set) => ({
      theme: 'light',
      setTheme: (theme) => set({ theme }),
      toggleTheme: () => set((state) => ({ theme: state.theme === 'light' ? 'dark' : 'light' })),
      }));

store 文件放在 src/store/useThemeStore.ts

组件中使用:

复制代码
// src/pages/Home.tsx
import { useThemeStore } from '../store/useThemeStore';

function Home() {
  // 解构出 state 和 actions
  const { theme, setTheme, toggleTheme } = useThemeStore();

  return (
    <div style={{ background: theme === 'dark' ? '#333' : '#fff' }}>
      <p>Current theme: {theme}</p>
      <button onClick={() => setTheme('light')}>Light</button>
      <button onClick={() => setTheme('dark')}>Dark</button>
      <button onClick={toggleTheme}>Toggle</button>
    </div>
  );
}

export default Home;

也可以这样写 优化

复制代码
function ShowTheme() {
  const theme = useThemeStore((state) => state.theme);
  return <div>Theme: {theme}</div>;
}

function ThemeControls() {
  const setTheme = useThemeStore((state) => state.setTheme);
  const toggleTheme = useThemeStore((state) => state.toggleTheme);
  return (
    <>
      <button onClick={() => setTheme('light')}>Light</button>
      <button onClick={toggleTheme}>Toggle</button>
    </>
  );
}

因为 Zustand 的 store 是在 React 外部创建的全局单例,通过 create 返回的 hook 会订阅这个单例的变化,所以不需要 Context。

这个就跟vue 的一模一样的 当然这个是不分模块的写法

我们如果项目庞大 需要分模块 就需要跟vue开发一样了需要分模块

相关推荐
子兮曰1 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰1 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万1 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝1 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋1 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁1 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
李少兄1 天前
JavaScript 隐式全局变量解析
javascript
汉堡大王95272 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大2 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师2 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端