Skip to content

Zustand

Zustand 是一个小型、快速且可扩展的状态管理解决方案。Zustand 有一个基于 hook 的舒适 API。它不是样板的或固执己见的,而是有足够的约定俗成的明确和流动的。

为了更好的在浏览器控制台查看状态数据,需要安装浏览器 zustand 插件

下面是一个使用zustand 的示例,包括状态数据定义与修改,使用typescript 声明。同时实现本地持久储存。

import { create } from 'zustand'
import { persist, createJSONStorage } from 'zustand/middleware'
import { devtools } from 'zustand/middleware'

interface VideoState {
  config: { playbackRate: number }
  setConfig: (field: 'playbackRate', value: any) => void
}

export const useVideoStore = create<VideoState>()(devtools(
  persist(
    (set, get) => ({
      config: {
        //播放速度
        playbackRate: 1
      },
      setConfig: (field: string, value: any) => set(state => ({ config: { ...state.config, [field]: value } }))
    }),
    {
      name: 'video-storage',
      //默认是localStorage
      // storage: createJSONStorage(() => sessionStorage),
      //哪些状态不需要持久化
      // partialize: (state) =>
      //  Object.fromEntries(
      //    Object.entries(state).filter(([key]) => !['foo'].includes(key)),
      //  ),
    },
  )),
)