useBoundStoreWithEqualityFn in Zustand’s source code explained.

In this article, we will understand how the useBoundStoreWithEqualityFn function is used in Zustand’s source code.

The above code is picked from https://github.com/pmndrs/zustand/blob/main/src/traditional.ts#L80

useBoundStoreWithEqualityFn is calle…


This content originally appeared on DEV Community and was authored by thinkThroo

In this article, we will understand how the useBoundStoreWithEqualityFn function is used in Zustand’s source code.

Image description

The above code is picked from https://github.com/pmndrs/zustand/blob/main/src/traditional.ts#L80

useBoundStoreWithEqualityFn is called in createWithEqualityFnImplfunction and returns another function named useStoreWithEqualityFn.

Let’s look at what’s in 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 is a React Hook that lets you subscribe to an external store and useSyncExternalStoreWithSelector is imported as shown below:

import useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector'

slice returned by this function, useStoreWithEqualityFn is further used in createWithEqualityFnImpl .

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

Object.assign(useBoundStoreWithEqualityFn, api)

return useBoundStoreWithEqualityFn

Object.assign updates the slice returned by useBoundStoreWithEqualityFn with the “api”.

The screenshot below demonstrates with an example how Object.assign does the update

Image description

and finally useBoundStoreWithEqualityFn is returned by createWithEqualityFnImpl.

About us:

At Think Throo, we are on a mission to teach the best practices inspired by open-source projects.

10x your coding skills by practising advanced architectural concepts in Next.js/React, learn the best practices and build production-grade projects.

We are open source — https://github.com/thinkthroo/thinkthroo (Do give us a star!)

Up skill your team with our advanced courses based on codebase architecture. Reach out to us at hello@thinkthroo.com to learn more!

References:

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

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




This content originally appeared on DEV Community and was authored by thinkThroo


Print Share Comment Cite Upload Translate Updates
APA

thinkThroo | Sciencx (2024-09-10T21:22:49+00:00) useBoundStoreWithEqualityFn in Zustand’s source code explained.. Retrieved from https://www.scien.cx/2024/09/10/useboundstorewithequalityfn-in-zustands-source-code-explained/

MLA
" » useBoundStoreWithEqualityFn in Zustand’s source code explained.." thinkThroo | Sciencx - Tuesday September 10, 2024, https://www.scien.cx/2024/09/10/useboundstorewithequalityfn-in-zustands-source-code-explained/
HARVARD
thinkThroo | Sciencx Tuesday September 10, 2024 » useBoundStoreWithEqualityFn in Zustand’s source code explained.., viewed ,<https://www.scien.cx/2024/09/10/useboundstorewithequalityfn-in-zustands-source-code-explained/>
VANCOUVER
thinkThroo | Sciencx - » useBoundStoreWithEqualityFn in Zustand’s source code explained.. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2024/09/10/useboundstorewithequalityfn-in-zustands-source-code-explained/
CHICAGO
" » useBoundStoreWithEqualityFn in Zustand’s source code explained.." thinkThroo | Sciencx - Accessed . https://www.scien.cx/2024/09/10/useboundstorewithequalityfn-in-zustands-source-code-explained/
IEEE
" » useBoundStoreWithEqualityFn in Zustand’s source code explained.." thinkThroo | Sciencx [Online]. Available: https://www.scien.cx/2024/09/10/useboundstorewithequalityfn-in-zustands-source-code-explained/. [Accessed: ]
rf:citation
» useBoundStoreWithEqualityFn in Zustand’s source code explained. | thinkThroo | Sciencx | https://www.scien.cx/2024/09/10/useboundstorewithequalityfn-in-zustands-source-code-explained/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.