In diesem Artikel werden wir uns ansehen, wie Zustand useSyncExternalStoreExports in seinem [Quellcode] verwendet.
useSyncExternalStoreExports wird aus use-sync-external-store/shim/with-selector importiert. use-sync-external-store ist ein abwärtskompatibler Shim für React.useSyncExternalStore Funktioniert mit jedem React, der Hooks unterstützt.
Wenn Sie den obigen Satz lesen, fragen Sie sich vielleicht, was ein useSyncExternalStore ist.
useSyncExternalStore ist ein React Hook, mit dem Sie einen externen Store abonnieren können.
const snapshot = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot?)
Verwenden Sie useSyncExternalStore, um einen Wert aus einem externen Speicher zu lesen, der sein kann:
Zustandsverwaltungsbibliotheken von Drittanbietern, die Zustände außerhalb von React speichern.
Browser-APIs, die einen veränderlichen Wert und Ereignisse bereitstellen, um seine Änderungen zu abonnieren.
import { useSyncExternalStore } from 'react'; import { todosStore } from './todoStore.js'; function TodosApp() { const todos = useSyncExternalStore(todosStore.subscribe, todosStore.getSnapshot); // ... }
Das obige Beispiel stammt aus React-Dokumenten.
Zustand verwendet useSyncExternalStore in 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 wird von useSyncExternalStoreExports destrukturiert und wird in useStoreWithEqualityFn verwendet.
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 hat api.subscribe, api.getState, api.getInitialState, selector und equalityFn.
Bei Think Throo haben wir es uns zur Aufgabe gemacht, die von Open-Source-Projekten inspirierten Best Practices zu vermitteln.
Verzehnfachen Sie Ihre Programmierkenntnisse, indem Sie fortgeschrittene Architekturkonzepte in Next.js/React üben, lernen Sie die Best Practices kennen und erstellen Sie Projekte in Produktionsqualität.
Wir sind Open Source – https://github.com/thinkthroo/thinkthroo (Geben Sie uns einen Stern!)
Verbessern Sie die Fähigkeiten Ihres Teams mit unseren Fortgeschrittenenkursen basierend auf der Codebasis-Architektur. Kontaktieren Sie uns unter [email protected], um mehr zu erfahren!
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
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3