首页 > web前端 > js教程 > 正文

Zustand源码中的useBoundStoreWithEqualityFn有解释。

王林
发布: 2024-09-11 06:37:35
原创
473 人浏览过

在本文中,我们将了解 Zustand 源码中如何使用 useBoundStoreWithEqualityFn 函数。

useBoundStoreWithEqualityFn in Zustand’s source code explained.

以上代码摘自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<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
}
登录后复制

useSyncExternalStore 是一个 React Hook,可让您订阅外部存储,并导入 useSyncExternalStoreWithSelector,如下所示:

import useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector'
登录后复制

该函数返回的切片,在 createWithEqualityFnImpl 中进一步使用 useStoreWithEqualityFn 。

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

Object.assign(useBoundStoreWithEqualityFn, api)

return useBoundStoreWithEqualityFn
登录后复制

Object.assign 使用“api”更新 useBoundStoreWithEqualityFn 返回的切片。

下面的屏幕截图通过示例演示了 Object.assign 如何进行更新

useBoundStoreWithEqualityFn in Zustand’s source code explained.

最后 useBoundStoreWithEqualityFn 由 createWithEqualityFnImpl 返回。

关于我们:

在 Think Throo,我们的使命是教授受开源项目启发的最佳实践。

通过在 Next.js/React 中练习高级架构概念,将您的编码技能提高 10 倍,学习最佳实践并构建生产级项目。

我们是开源的 — https://github.com/thinkthroo/thinkthroo (请给我们一颗星!)

通过我们基于代码库架构的高级课程来提高您的团队的技能。请通过 hello@thinkthroo.com 联系我们以了解更多信息!

参考资料:

  1. https://github.com/search?q=useBoundStore&type=code

  2. https://github.com/churichard/notabase



以上是Zustand源码中的useBoundStoreWithEqualityFn有解释。的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!