@
theprimone #2
状态管理主要解决的问题有:
1. 跨组件状态传递
2. 组织 actionsa ,比如 createBook 、updateBook
zustand 强制在 create store 的时候组织 actions:
https://docs.pmnd.rs/zustand/guides/updating-statevaltio 很自由,可以用你最熟悉的 js 语法组织 actions:
https://valtio.pmnd.rs/docs/how-tos/how-to-organize-actionsJotai 完全遵守 React Hooks 规则,本身没有组织 actions 的办法。需要使用 React 闭包 + useCallback 来封装 actions ,或者使用 Reducer 。
比如上面的 BookController 按 Jotai 的写法就会变成:
```ts
import { atom } from 'jotai'
const booksAtom = atom<Record<string, Book>>()
function useBooks() {
const [books, setBooks] = useAtom(booksAtom)
const getBooks = useCallback(async () => {
const books = await fetchBooks()
setBooks((prevBooks) => {
const nextBooks = { ...prevBooks }
books.forEach((book) => {
nextBooks[
book.id] = book
})
return nextBooks
})
}, [setBooks])
const createBook = useCallback(
async (book: Book) => {
const newBook = await fetch('createBook', { method: 'POST', body: book })
setBooks((prevBooks) => ({ ...prevBooks, [
newBook.id]: newBook }))
},
[setBooks]
)
const updateBook = useCallback(
async (id: string, book: Book) => {
// ...
},
[setBooks]
)
return { books, getBooks, createBook, updateBook }
}
```
因为我讨厌 useCallback 以及 Reducer ,所以不推荐 Jotai 。