Maison > interface Web > js tutoriel > createWithEqualityFnImpl dans le code source de Zustand expliqué.

createWithEqualityFnImpl dans le code source de Zustand expliqué.

DDD
Libérer: 2024-09-13 06:25:02
original
758 Les gens l'ont consulté

Dans cet article, nous analyserons comment createWithEqualityFnImpl est implémenté en enregistrant une partie de sa valeur pour mieux comprendre.

createWithEqualityFnImpl in Zustand’s source code explained.

Comme vous pouvez le constater sur l'image ci-dessus, createWithEqualityFn appelle la fonction createWithEqualityFnImpl. Ce modèle est utilisé dans vanilla.ts ainsi que démontré ci-dessous :

export const createStore = ((createState) =>
  createState ? createStoreImpl(createState) : createStoreImpl) as CreateStore
Copier après la connexion

createStore appelle createStoreImpl et createWithEqualityFn appelle createWithhEqualityFnImpl.

Avant de nous lancer dans l'exécution de createWithEqualityFn, comprenons d'abord le but de l'utilisation de createWithEqualityFn.

createWithEqualityFnImpl in Zustand’s source code explained.

La capture d'écran ci-dessus provient de https://github.com/pmndrs/zustand/tree/main

Vous pouvez utiliser createWithEqualityFn pour avoir plus de contrôle sur le nouveau rendu.

créerAvecEqualityFn

const createWithEqualityFnImpl = <T>(
  createState: StateCreator<T, [], []>,
  defaultEqualityFn?: <U>(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
}
Copier après la connexion

useStoreWithEqualityFn

export function useStoreWithEqualityFn<S extends ReadonlyStoreApi<unknown>>(
  api: S,
): ExtractState<S>

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

export function useStoreWithEqualityFn<TState, StateSlice>(
  api: ReadonlyStoreApi<TState>,
  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
}
Copier après la connexion

Il s'agit d'une fonction de surcharge. useStoreWithEqualityFn a 3 définitions :

export function useStoreWithEqualityFn<S extends ReadonlyStoreApi<unknown>>(
  api: S,
): ExtractState<S>

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

export function useStoreWithEqualityFn<TState, StateSlice>(
  api: ReadonlyStoreApi<TState>,
  selector: (state: TState) => StateSlice = identity as any,
  equalityFn?: (a: StateSlice, b: StateSlice) => boolean,
) {
Copier après la connexion

createWithEqualityFnImpl in Zustand’s source code explained.

Voyons à quoi ressemble la valeur de la tranche :

createWithEqualityFnImpl in Zustand’s source code explained.

valeur : 1 est ignorée car nous définissons le code pour éviter un nouveau rendu lorsque la valeur est 1, comme indiqué ci-dessous :

createWithEqualityFnImpl in Zustand’s source code explained.

À propos de nous :

Chez Think Throo, nous avons pour mission d'enseigner les meilleures pratiques inspirées des projets open source.

10x vos compétences en codage en pratiquant des concepts architecturaux avancés dans Next.js/React, apprenez les meilleures pratiques et construisez des projets de niveau production.

Nous sommes open source — https://github.com/thinkthroo/thinkthroo (Donnez-nous une étoile !)

Développez les compétences de votre équipe avec nos cours avancés basés sur l'architecture de base de code. Contactez-nous à hello@thinkthroo.com pour en savoir plus !

Références :

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

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



Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal