„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > createWithEqualityFnImpl im Quellcode von Zustand erklärt.

createWithEqualityFnImpl im Quellcode von Zustand erklärt.

Veröffentlicht am 08.11.2024
Durchsuche:943

In diesem Artikel analysieren wir, wie createWithEqualityFnImpl implementiert wird, indem wir einen Teil seines Wertes protokollieren, um ein besseres Verständnis zu erhalten.

createWithEqualityFnImpl in Zustand’s source code explained.

Wie Sie dem obigen Bild entnehmen können, ruft createWithEqualityFn die Funktion createWithEqualityFnImpl auf. Dieses Muster wird in Vanilla.ts verwendet und unten gezeigt:

export const createStore = ((createState) =>
  createState ? createStoreImpl(createState) : createStoreImpl) as CreateStore

createStore ruft createStoreImpl auf und createWithEqualityFn ruft createWithhEqualityFnImpl auf.

Bevor wir mit der Ausführung von createWithEqualityFn beginnen, wollen wir zunächst den Zweck der Verwendung von createWithEqualityFn verstehen.

createWithEqualityFnImpl in Zustand’s source code explained.

Der obige Screenshot stammt von https://github.com/pmndrs/zustand/tree/main

Sie können createWithEqualityFn verwenden, um mehr Kontrolle über das erneute Rendern zu haben.

createWithEqualityFn

const createWithEqualityFnImpl = (
  createState: StateCreator,
  defaultEqualityFn?: (a: U, b: U) => boolean,
) => {
  const api = createStore(createState)

  const useBoundStoreWithEqualityFn: any = (
    selector?: any,
    equalityFn = defaultEqualityFn,
  ) => useStoreWithEqualityFn(api, selector, equalityFn)

  Object.assign(useBoundStoreWithEqualityFn, api)

  return useBoundStoreWithEqualityFn
}

useStoreWithEqualityFn

export function useStoreWithEqualityFn>(
  api: S,
): ExtractState

export function useStoreWithEqualityFn, U>(
  api: S,
  selector: (state: ExtractState) => U,
  equalityFn?: (a: U, b: U) => boolean,
): U

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
}

Dies ist eine Überladungsfunktion. useStoreWithEqualityFn hat 3 Definitionen:

export function useStoreWithEqualityFn>(
  api: S,
): ExtractState

export function useStoreWithEqualityFn, U>(
  api: S,
  selector: (state: ExtractState) => U,
  equalityFn?: (a: U, b: U) => boolean,
): U

export function useStoreWithEqualityFn(
  api: ReadonlyStoreApi,
  selector: (state: TState) => StateSlice = identity as any,
  equalityFn?: (a: StateSlice, b: StateSlice) => boolean,
) {

createWithEqualityFnImpl in Zustand’s source code explained.

Sehen wir uns an, wie der Slice-Wert aussieht:

createWithEqualityFnImpl in Zustand’s source code explained.

Wert: 1 wird übersprungen, da wir den Code so eingestellt haben, dass ein erneutes Rendern vermieden wird, wenn der Wert 1 ist, wie unten gezeigt:

createWithEqualityFnImpl in Zustand’s source code explained.

Über uns:

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!

Referenzen:

  1. https://github.com/pmndrs/zustand/blob/main/src/traditional.ts#L74

  2. https://github.com/pmndrs/zustand/blob/main/src/traditional.ts#L39



Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/thinkthroo/createwithequalityfnimpl-in-zustands-source-code-explained-3aa0?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

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