4
0
forked from crowetic/commerce

Memoize commerce config

This commit is contained in:
Luis Alvarez 2020-10-05 10:49:22 -05:00
parent 3d2739e526
commit c782b3d0f0

View File

@ -35,7 +35,20 @@ export function CommerceProvider({ children, config }: CommerceProps) {
throw new Error('CommerceProvider requires a valid config object')
}
return <Commerce.Provider value={config}>{children}</Commerce.Provider>
// Because the config is an object, if the parent re-renders this provider
// will re-render every consumer unless we memoize the config
const cfg = useMemo(
() => ({
fetcher: config.fetcher,
locale: config.locale,
cartCookie: config.cartCookie,
}),
// Even though the fetcher is a function, it's never expected to be
// added dynamically (We should say that on the docs for this hook)
[config.fetcher, config.locale, config.cartCookie]
)
return <Commerce.Provider value={cfg}>{children}</Commerce.Provider>
}
export function useCommerce<T extends CommerceConfig>() {