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

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

2024 年 11 月 8 日に公開
ブラウズ:822

この記事では、理解を深めるために値の一部をログに記録することで、createWithEqualityFnImpl がどのように実装されるかを分析します。

createWithEqualityFnImpl in Zustand’s source code explained.

上の画像からわかるように、createWithEqualityFn は関数 createWithEqualityFnImpl を呼び出します。このパターンは vanilla.ts でも使用されており、以下に示されています:

export const createStore = ((createState) =>
  createState ? createStoreImpl(createState) : createStoreImpl) as CreateStore

createStore は createStoreImpl を呼び出し、createWithEqualityFn は createWithhEqualityFnImpl を呼び出します。

createWithEqualityFn の実行に入る前に、まず createWithEqualityFn を使用する目的を理解しましょう。

createWithEqualityFnImpl in Zustand’s source code explained.

上のスクリーンショットは https://github.com/pmndrs/zustand/tree/main

からのものです。

createWithEqualityFn を使用すると、再レンダリングをより詳細に制御できます。

EqualityFn で作成

const createWithEqualityFnImpl = (
  createState: StateCreator,
  defaultEqualityFn?: (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
}

useStoreWithEqualityFn

export function useStoreWithEqualityFn>(
  api: S,
): ExtractState

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

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
}

これはオーバーロード関数です。 useStoreWithEqualityFn には 3 つの定義があります:

export function useStoreWithEqualityFn>(
  api: S,
): ExtractState

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

export function useStoreWithEqualityFn(
  api: ReadonlyStoreApi,
  selector: (state: TState) => StateSlice = identity as any,
  equalityFn?: (a: StateSlice, b: StateSlice) => boolean,
) {

createWithEqualityFnImpl in Zustand’s source code explained.

スライス値がどのように見えるかを見てみましょう:

createWithEqualityFnImpl in Zustand’s source code explained.

値: 1 はスキップされます。これは、以下に示すように、値が 1 の場合に再レンダリングを避けるようにコードを設定しているためです。

createWithEqualityFnImpl in Zustand’s source code explained.

私たちについて:

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

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

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

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

参考文献:

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

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



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

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

Copyright© 2022 湘ICP备2022001581号-3