Rumah > hujung hadapan web > tutorial js > createWithEqualityFnImpl dalam kod sumber Zustand dijelaskan.

createWithEqualityFnImpl dalam kod sumber Zustand dijelaskan.

DDD
Lepaskan: 2024-09-13 06:25:02
asal
758 orang telah melayarinya

Dalam artikel ini, kami akan menganalisis cara createWithEqualityFnImpl dilaksanakan dengan mengelog beberapa nilainya untuk mendapatkan pemahaman yang lebih baik.

createWithEqualityFnImpl in Zustand’s source code explained.

Seperti yang anda boleh ketahui daripada imej di atas, createWithEqualityFn memanggil fungsi createWithEqualityFnImpl. Corak ini digunakan dalam vanilla.ts serta ditunjukkan di bawah:

export const createStore = ((createState) =>
  createState ? createStoreImpl(createState) : createStoreImpl) as CreateStore
Salin selepas log masuk

createStore panggilan createStoreImpl dan createWithEqualityFn panggilan createWithhEqualityFnImpl.

Sebelum kita melangkah ke dalam pelaksanaan createWithEqualityFn, mari kita fahami tujuan menggunakan createWithEqualityFn.

createWithEqualityFnImpl in Zustand’s source code explained.

Tangkapan skrin di atas adalah daripada https://github.com/pmndrs/zustand/tree/main

Anda boleh menggunakan createWithEqualityFn untuk mempunyai lebih kawalan ke atas pemaparan semula.

createWithEqualityFn

const createWithEqualityFnImpl = <T>(
  createState: StateCreator<T, [], []>,
  defaultEqualityFn?: <U>(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
}
Salin selepas log masuk

useStoreWithEqualityFn

export function useStoreWithEqualityFn<S extends ReadonlyStoreApi<unknown>>(
  api: S,
): ExtractState<S>

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

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
}
Salin selepas log masuk

Ini adalah fungsi lebihan beban. useStoreWithEqualityFn mempunyai 3 takrifan:

export function useStoreWithEqualityFn<S extends ReadonlyStoreApi<unknown>>(
  api: S,
): ExtractState<S>

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

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

createWithEqualityFnImpl in Zustand’s source code explained.

Mari lihat rupa nilai hirisan:

createWithEqualityFnImpl in Zustand’s source code explained.

nilai: 1 dilangkau kerana kami menetapkan kod untuk mengelakkan pemaparan semula apabila nilainya ialah 1 seperti yang ditunjukkan di bawah:

createWithEqualityFnImpl in Zustand’s source code explained.

Tentang kami:

Di Think Throo, kami berada dalam misi untuk mengajar amalan terbaik yang diilhamkan oleh projek sumber terbuka.

10x kemahiran pengekodan anda dengan mempraktikkan konsep seni bina lanjutan dalam Next.js/React, pelajari amalan terbaik dan bina projek gred pengeluaran.

Kami adalah sumber terbuka — https://github.com/thinkthroo/thinkthroo (Beri kami bintang!)

Tingkatkan kemahiran pasukan anda dengan kursus lanjutan kami berdasarkan seni bina pangkalan kod. Hubungi kami di hello@thinkthroo.com untuk mengetahui lebih lanjut!

Rujukan:

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

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



Atas ialah kandungan terperinci createWithEqualityFnImpl dalam kod sumber Zustand dijelaskan.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan