В этой статье мы рассмотрим, как Zustand использует useSyncExternalStoreExports в своем [исходном коде.]
useSyncExternalStoreExports импортируется из use-sync-external-store/shim/with-selector. use-sync-external-store — это обратно совместимая оболочка для React.useSyncExternalStore. Работает с любым React, поддерживающим хуки.
Прочитав приведенное выше предложение, вам может быть интересно, что такое useSyncExternalStore.
useSyncExternalStore — это React Hook, который позволяет вам подписаться на внешний магазин.
const snapshot = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot?)
Используйте useSyncExternalStore для чтения значения из внешнего хранилища, которое может быть:
Сторонние библиотеки управления состоянием, которые хранят состояние вне React.
API браузера, которые предоставляют изменяемое значение и события для подписки на его изменения.
import { useSyncExternalStore } from 'react'; import { todosStore } from './todoStore.js'; function TodosApp() { const todos = useSyncExternalStore(todosStore.subscribe, todosStore.getSnapshot); // ... }
Приведенный выше пример взят из документации React.
Zustand использует useSyncExternalStore в src/traditional.ts.
import ReactExports from 'react' // eslint-disable-next-line import/extensions import useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector' import { createStore } from './vanilla.ts' import type { Mutate, StateCreator, StoreApi, StoreMutatorIdentifier, } from './vanilla.ts' const { useDebugValue } = ReactExports const { useSyncExternalStoreWithSelector } = useSyncExternalStoreExports
useSyncExternalStoreWithSelector деструктурирован из useSyncExternalStoreExports и используется в useStoreWithEqualityFn.
export function useStoreWithEqualityFn( api: ReadonlyStoreApi , selector: (state: TState) => StateSlice = identity as any, equalityFn?: (a: StateSlice, b: StateSlice) => boolean, ) { const slice = useSyncExternalStoreWithSelector( api.subscribe, api.getState, api.getInitialState, selector, equalityFn, ) useDebugValue(slice) return slice }
useSyncExternalStoreWithSelector имеет api.subscribe, api.getState, api.getInitialState, селектор и функцию равенства.
В Think Throo мы стремимся обучать лучшим практикам, вдохновленным проектами с открытым исходным кодом.
Увеличьте свои навыки программирования в 10 раз, практикуя передовые архитектурные концепции в Next.js/React, изучайте лучшие практики и создавайте проекты промышленного уровня.
У нас открытый исходный код — https://github.com/thinkthroo/thinkthroo (дайте нам звезду!)
Повышайте квалификацию своей команды с помощью наших продвинутых курсов, основанных на архитектуре кодовой базы. Чтобы узнать больше, напишите нам по адресу [email protected]!
https://github.com/pmndrs/zustand/blob/main/src/traditional.ts#L44
https://www.npmjs.com/package/use-sync-external-store
https://legacy.reactjs.org/docs/hooks-reference.html#usesyncexternalstore
https://react.dev/reference/react/useSyncExternalStore
https://github.com/reactwg/react-18/discussions/86
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3