Wener Site

Jotai

约 2 分钟阅读
  • pmndrs/jotaiGitHubpmndrs/jotaipmndrs/jotai 是什么? · 7.1kB/2.7kB · 大状态拆分小(原子/atom)状态 - 原子状态更利于复用和减小变化影响范围 · 核心接口 atom, Provider, useAtom, Store · jotai/utils 包含其他工具 atom笔记:Jotai 是什么?
    • 7.1kB/2.7kB
    • 大状态拆分小(原子/atom)状态 - 原子状态更利于复用和减小变化影响范围
    • 核心接口 atom, Provider, useAtom, Store
      • jotai/utils 包含其他工具 atom
      • jotai/集成 包含与其他库集成的逻辑 - zustand, xstate, react-query, redux, immer, valtio
      • jotai/devtools - Redux devtool 集成 - useAtomDevtools(tasksAtom) - 依赖 debugLabel
    • 类似 Recoli 但使用上更简单
    • 替代 useState+useContext
    • Suspense
    • vs Recoil
      • jotai: 最小化接口, 不使用字符串标识, TypeScript
      • recoil: string key, 序列化支持更好
    • vs zustandGitHub Filepmndrs/jotai/docs/introduction/comparison.md
  • 参考
bash
# 推荐 focusAtom
npm install jotai optics-ts jotai-optics
Packagesjotainpm PackagejotaiNPMoptics-tsnpm Packageoptics-tsNPMjotai-opticsnpm Packagejotai-opticsNPM
  • jotai 提供原子能力,可以与现有状态管理集成使用 - zustand笔记zustandpmndrs/zustand 是什么? · out of tree 状态管理 · 可外部查询、修改、订阅 · 可多个渲染树使用 · 支持 react concurrency · Context 可选 · 默认全局 store 单例 · 可在其它框架使用 - 不依赖 react打开:/notes/web/react/zustand, valtio笔记valtiopmndrs/valtio · 7kB/2.5kB - use-sync-external-store+proxy-compare · 基于 proxy 的状态管理 · 类似 mobx, vue · 默认状态变化是异步触发监听 · 可以使用 Class 作为 被代理对象打开:/notes/web/react/valtio, xstate, redux, urql
  • 状态拆分 splitAtom, selectAtom, focusAtom optics-tsGitHubakheron/optics-ts 9kB/3kB
  • atom 和 async/await 一样有传染性
    • 因此 jotai 提供非常多的集成和辅助
  • atom vs valtio笔记valtiopmndrs/valtio · 7kB/2.5kB - use-sync-external-store+proxy-compare · 基于 proxy 的状态管理 · 类似 mobx, vue · 默认状态变化是异步触发监听 · 可以使用 Class 作为 被代理对象打开:/notes/web/react/valtio
    • valtio
      • 基于代理,不能随便传递 - 接收方明确知道是 代理
      • 更容易 select 部分状态
    • atom
      • 有专门的 wrapper 类型 - 类似 Promise,接收方肯定知道是 atom
      • 侵入性更大,但更不容易出错,可以直接传递使用
      • 依赖 focusAtom、splitAtom、selectAtom 来拆分状态
  • Store 为上下文
    • 可以在非 react 环境使用
    • .get,.set,.sub

utils

  • storage - import { atomWithStorage, RESET } from 'jotai/utils'
  • SSR - import { useHydrateAtoms } from 'jotai/utils'
  • Async - import { loadable, atomWithObservable, unwrap } from "jotai/utils"
    • loadable - 避免 Suspense
  • reset - import { atomWithReset, useResetAtom, RESET } from 'jotai/utils'
    • 重置为之前状态
  • Family - import { atomFamily } from 'jotai/utils'
    • 创建 factory
    • 支持自定义 equal
  • callback - import { useAtomCallback } from 'jotai/utils'
    • 动态和 atom 交互,而不是预定义的 atom
  • reducer - import { atomWithReducer } from 'jotai/utils'
  • selectAtom
    • 获取部分状态
    • 监听部分变化
  • splitAtom
    • array -> item
TypeScript
function selectAtom<Value, Slice>(
  anAtom: Atom<Value>,
  selector: (v: Value, prevSlice?: Slice) => Slice,
  equalityFn: (a: Slice, b: Slice) => boolean = Object.is
): Atom<Slice>

集成

  • jotai-trpc - 使用 Vanilla 客户端
    • atomWithQuery
    • atomWithMutation
    • atomWithSubscription
  • jotai-tanstack-query
    • atomsWithQuery
    • atomsWithInfiniteQuery
    • atomsWithMutation
  • jotai-urql
    • atomWithQuery
    • atomWithMutation
    • atomWithSubscription
  • jotai-immer
  • jotai-xstate
  • jotai-location
    • window.location
  • jotai-cache
    • read-only atom with cache
    • 基于状态 memo
  • jotai-molecules
  • jotai-optics
    • 获取部分 state
  • jotai-redux
  • jotai-relay
  • jotai-valtio
    • atomWithProxy
      • valtio -> atom
  • jotai-zustand
    • atomWithStore

  • @swc-jotai/react-refresh
  • @swc-jotai/debug-label
  • jotai/babel/plugin-react-refresh
  • jotai/babel/plugin-debug-label
  • jotai/babel/preset
  • jotai-devtools
    • useAtomsDebugValue
    • useAtomDevtools
    • useAtomsDevtools
    • useAtomsSnapshot
    • useGotoAtomsSnapshot

关联信息

反向链接和本文引用的外部资料。

反向链接

  • JavaScript Awesome
    笔记 · jotai

    novnc/noVNC · felixrieseberg/macintosh.js · RobinCsl/awesome-js-tooling-not-in-js · sorrycc/awesome-javascript · CLI / Table

  • React Awesome
    笔记 · jotai

    专门功能选择专业组件 - Headless 配合 UI 组件达到更为理想的结果 · react-table · react-hook-form · floatingui · 选择样式与组件独立的 UI 库 · tailwindcss+daisyui

  • React Patterns
    笔记 · jotai

    | name | note | · | 基础 | · | 条件渲染 | | · | 上下文 | , | · | 自定义 Hooks 复用逻辑 | | · | 高阶组建 | | · | 渲染属性 | , | · | 布局组件 | · | 组合组件 | |

References

GitHub

4 条

其他外链

2 条
最近更新commit f6f5925Edit

On this page