Dans cet article, nous comprendrons comment la fonction useBoundStoreWithEqualityFn est utilisée dans le code source de Zustand.
Le code ci-dessus est extrait de https://github.com/pmndrs/zustand/blob/main/src/traditional.ts#L80
useBoundStoreWithEqualityFn est appelé dans la fonction createWithEqualityFnImpl et renvoie une autre fonction nommée useStoreWithEqualityFn.
Regardons ce qui est utiliséStoreWithEqualityFn.
// Pulled from https://github.com/pmndrs/zustand/blob/main/src/traditional.ts#L80 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 }
useSyncExternalStore est un React Hook qui vous permet de vous abonner à un magasin externe et useSyncExternalStoreWithSelector est importé comme indiqué ci-dessous :
import useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector'
tranche renvoyée par cette fonction, useStoreWithEqualityFn est ensuite utilisée dans createWithEqualityFnImpl .
const useBoundStoreWithEqualityFn: any = ( selector?: any, equalityFn = defaultEqualityFn, ) => useStoreWithEqualityFn(api, selector, equalityFn) Object.assign(useBoundStoreWithEqualityFn, api) return useBoundStoreWithEqualityFn
Object.assign met à jour la tranche renvoyée par useBoundStoreWithEqualityFn avec l'« api ».
La capture d'écran ci-dessous montre avec un exemple comment Object.assign effectue la mise à jour
et enfin useBoundStoreWithEqualityFn est renvoyé par createWithEqualityFnImpl.
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 créez 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 à [email protected] pour en savoir plus !
https://github.com/search?q=useBoundStore&type=code
https://github.com/churichard/notabase
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3