「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Staat のソースコードの useBoundStoreWithEqualityFn について説明しました。

Staat のソースコードの useBoundStoreWithEqualityFn について説明しました。

2024 年 11 月 3 日に公開
ブラウズ:658

この記事では、useBoundStoreWithEqualityFn 関数が Zustand のソース コードでどのように使用されているかを理解します。

useBoundStoreWithEqualityFn in Zustand’s source code explained.

上記のコードは https://github.com/pmndrs/zustand/blob/main/src/traditional.ts#L80 から抜粋したものです

useBoundStoreWithEqualityFn は createWithEqualityFnImplfunction で呼び出され、useStoreWithEqualityFn という名前の別の関数を返します。

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 は外部ストアをサブスクライブできる React フックで、以下に示すように 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 は、useBoundStoreWithEqualityFn によって返されたスライスを「api」で更新します。

以下のスクリーンショットは、Object.assign がどのように更新を行うかを例とともに示しています

useBoundStoreWithEqualityFn in Zustand’s source code explained.

そして最後に createWithEqualityFnImpl によって useBoundStoreWithEqualityFn が返されます。

私たちについて:

Think Throo では、オープンソース プロジェクトからインスピレーションを得たベスト プラクティスを教えるという使命を担っています。

Next.js/React の高度なアーキテクチャ概念を実践してコーディング スキルを 10 倍にし、ベスト プラクティスを学び、本番レベルのプロジェクトを構築します。

私たちはオープンソースです — https://github.com/thinkthroo/thinkthroo (スターを付けてください!)

コードベース アーキテクチャに基づいた高度なコースでチームのスキルを向上させます。詳細については、[email protected] までお問い合わせください。

参考文献:

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

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



リリースステートメント この記事は次の場所に転載されています: https://dev.to/thinkthroo/useboundstorewithequalityfn-in-zustands-source-code-explained-4fp?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3