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
- Jotai advantages over Recoil #420GitHub Issuepmndrs/jotai#420
- recoil: string key, 序列化支持更好
- jotai: 最小化接口, 不使用字符串标识, TypeScript
- vs zustandGitHub Filepmndrs/jotai/docs/introduction/comparison.md
- 参考
# 推荐 focusAtom
npm install jotai optics-ts jotai-opticsPackagesjotainpm 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 来拆分状态
- valtio
- 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
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
- Molecule pattern
- jotai.org/docs/guides/atoms-in-atom
- jotai-optics
- 获取部分 state
- jotai-redux
- jotai-relay
- jotai-valtio
- atomWithProxy
- valtio -> atom
- atomWithProxy
- 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 条- akheron/optics-tsgithub.com/akheron/optics-ts
- pmndrs/jotaigithub.com/pmndrs/jotai
- pmndrs/jotai/docs/introduction/comparison.mdgithub.com/pmndrs/jotai/blob/master/docs/introduction/comparison.md
- pmndrs/jotai#420github.com/pmndrs/jotai/issues/420
其他外链
2 条- blog.axlight.com/posts/jotai-tipsblog.axlight.com/posts/jotai-tips
- jotai.org/docs/guides/atoms-in-atomjotai.org/docs/guides/atoms-in-atom