在这篇文章中,我们将了解Zustand源码中useBoundStoreWithEqualityFn函数是如何使用的。
上述代码摘自https://github.com/pmndrs/zustand/blob/main/src/traditional.ts#L80
useBoundStoreWithEqualityFn 在 createWithEqualityFnImpl 函数中被调用,并返回另一个名为 useStoreWithEqualityFn 的函数。
我们看看useStoreWithEqualityFn里有什么。
// 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 是一个 React Hook,可让您订阅外部存储并导入 useSyncExternalStoreWithSelector,如下所示:
import useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector'
此函数返回的切片, useStoreWithEqualityFn 进一步在 createWithEqualityFnImpl 中使用。
const useBoundStoreWithEqualityFn: any = ( selector?: any, equalityFn = defaultEqualityFn, ) => useStoreWithEqualityFn(api, selector, equalityFn) Object.assign(useBoundStoreWithEqualityFn, api) return useBoundStoreWithEqualityFn
Object.assign 使用“api”更新 useBoundStoreWithEqualityFn 返回的切片。
下面的屏幕截图通过示例演示了 Object.assign 如何进行更新
最后 useBoundStoreWithEqualityFn 由 createWithEqualityFnImpl 返回。
在 Think Throo,我们的使命是教授受开源项目启发的最佳实践。
通过在 Next.js/React 中练习高级架构概念,提高您的编码技能,学习最佳实践并构建生产级项目。
我们是开源的 — https://github.com/thinkthroo/thinkthroo (请给我们一颗星!)
通过我们基于代码库架构的高级课程来提高您的团队技能。请通过 [email protected] 联系我们以了解更多信息!
https://github.com/search?q=useBoundStore&type=code
https://github.com/churichard/notabase
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3