Storage
atomWithStorage
参考:https://github.com/pmndrs/jotai/pull/394
import { useAtom } from 'jotai'import { atomWithStorage } from 'jotai/utils'const darkModeAtom = atomWithStorage('darkMode', false)const Page = () => {const [darkMode, setDarkMode] = useAtom(darkModeAtom)return (<><h1>Welcome to {darkMode ? 'dark' : 'light'} mode!</h1><button onClick={() => setDarkMode(!darkMode)}>toggle theme</button></>)}
atomWithStorage
函数创建了一个原子,其值在 React 的 localStorage
或 sessionStorage
,或者在 React Native 的 AsyncStorage
中持久化。
参数
key(必需):在将状态与localStorage,sessionStorage或AsyncStorage同步时使用的唯一字符串作为键
initialValue(必需):原子的初始值
storage(可选):具有以下方法的对象:
- getItem(key, initialValue)(必需):从存储中读取项目,或回退到
initialValue
- setItem(key, value)(必需):将项目保存到存储
- removeItem(key)(必需):从存储中删除项目
- subscribe(key, callback, initialValue)(可选):订阅外部存储更新的方法。
options(可选):具有以下属性的对象:
- getOnInit(可选,默认为false):一个布尔值,表示是否在初始化时从存储中获取项目。请注意,在SPA中,如果
getOnInit
未设置或为false
,则始终会在初始化时获取初始值,而不是存储的值。如果首选存储的值,将getOnInit
设置为true
。
如果未指定,默认的存储实现使用localStorage
进行存储/检索,JSON.stringify()
/JSON.parse()
进行序列化/反序列化,并订阅storage