Jotai 試用紀錄

可取代 React Redux, State Managment, atomic.

此字詞 Jotai 應該是來自日文,意思是狀態。 採用方法為 Atomic。設計理念來自 Recoilarrow-up-right。Recoil 由 facebook 提出,可是一直處在實驗階段反觀同類的 Jotai 早已後來居上。

適合中小型的 store。

開發工具:jotai-devtoolsarrow-up-right 勉強可用。尚未找到更好的。

優點:簡單。就只有 store 存取功能。(我們也只要這個功能而已)

缺點:太簡單。(優點就是它的缺點)

其他:已通過評估、已試用。可應用取代 Redux。


應用方法

因為 Jotai 的原理是 atomic (原子) ,可是真實世界的物理特性主要由 molecule (分子)決定。意思是 atomic 太細。真實的存存單位是數群數據。

應用方法一:buttom-up

由下到上。用 atom 把最底層的 atom 各自建立。再用 derived atom 技訢可以把相關的放在一個只能讀取的群組。寫入時用各自的 atom 就行。

再進一步的操作函式就做成 action。

metaAtom.ts
export const darkThemeAtom = atom<boolean>(false)
darkThemeAtom.debugLabel = 'meta/darkThemeAtom'

export const blockingAtom = atom<boolean>(false)
blockingAtom.debugLabel = 'meta/blockingAtom'

export const topAlertAtom = atom<ITopAlert | undefined>(undefined)
topAlertAtom.debugLabel = 'meta/topAlertAtom'

//-----------------------------------------------------------------------------
// derived atom / selector 群組的部份只提供讀取能力。
export const selectMeta = atom((get) => ({
  darkTheme: get(darkThemeAtom).valueOf(),
  blocking: get(blockingAtom).valueOf(),
  topAlert: { ...get(topAlertAtom) }
}))
selectMeta.debugLabel = 'selectMeta';

應用方法二:top-down

atom 做大,放入同一群組全部欄位,再用 select 指令取出其中欄位。

再進一步的操作函式就做成 action。


Jotai 重點指令介紹

Jotai arrow-up-right的理念來個 Recoilarrow-up-right, 指令設計也來自 Recoil 不過只有基本指令相當。

基本指令

進階指令

  • useAtomCallbackarrow-up-right

    • 相當於 Recoil 的 useRecoilCallback(),用自設計自訂的 action。自訂 get/set 以外的存取行為。

  • Familyarrow-up-right --- 與 Recoil 的 atomFamily 定義有差異。且尚看不出價值不建議使用。

  • Selectarrow-up-right --- 與 Recoil 的 selectFamily 定義有差異。且尚看不出價值不建議使用。

把進一步的操作函式做成 hooks 形式的 action。

兩招打天下: assignProps & assignValue

(EOF)

Last updated