Neste artigo, veremos como Zustand usa useSyncExternalStoreExports em seu [código-fonte.]
useSyncExternalStoreExports é importado de use-sync-external-store/shim/with-selector. use-sync-external-store é um shim compatível com versões anteriores para React.useSyncExternalStore Funciona com qualquer React que suporte Hooks.
Lendo a frase acima, você deve estar se perguntando o que é useSyncExternalStore.
useSyncExternalStore é um React Hook que permite assinar uma loja externa.
const snapshot = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot?)
Use useSyncExternalStore para ler um valor do armazenamento externo que pode ser:
Bibliotecas de gerenciamento de estado de terceiros que mantêm estado fora do React.
APIs de navegador que expõem um valor mutável e eventos para assinar suas alterações.
import { useSyncExternalStore } from 'react'; import { todosStore } from './todoStore.js'; function TodosApp() { const todos = useSyncExternalStore(todosStore.subscribe, todosStore.getSnapshot); // ... }
O exemplo acima foi retirado da documentação do React.
Zustand usa useSyncExternalStore em 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 é desestruturado de useSyncExternalStoreExports e é usado em 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 tem api.subscribe, api.getState, api.getInitialState, selector e equalityFn.
No Think Throo, temos a missão de ensinar as melhores práticas inspiradas em projetos de código aberto.
10x suas habilidades de codificação praticando conceitos de arquitetura avançados em Next.js/React, aprenda as melhores práticas e crie projetos de nível de produção.
Somos código aberto - https://github.com/thinkthroo/thinkthroo (Dê-nos uma estrela!)
Aprimore sua equipe com nossos cursos avançados baseados na arquitetura de base de código. Entre em contato conosco pelo e-mail [email protected] para saber mais!
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
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3