Why does Polaris use useCallback?

seandz
Excursionist
52 3 9
// documention example
function TextFieldExample() {
  const [value, setValue] = useState('Jaded Pixel');
​
  const handleChange = useCallback((newValue) => setValue(newValue), []);
​
  return <TextField label="Store name" value={value} onChange={handleChange} />;
}

I see this pattern across the docs. What advantage does it have over the simpler, more common pattern of passing an updated value straighto to useState() like so:

 

function TextFieldExample() {
  const [value, setValue] = useState('Jaded Pixel');
​
  return <TextField label="Store name" value={value} onChange={newValue => setValue(newValue)} />;
}
Replies 6 (6)
OTM
Shopify Expert
696 170 250

Hi, @seandz ,

This is Evita from On The Map.

 

It's not Polaris function, but React apps callback, you can read more about useCallback here - https://reactjs.org/docs/hooks-reference.html#usecallback

 

Best,
Evita

On The Map Marketing | Developing custom Shopify Sites & Apps is our thing

- Install our latest app Accessibly - Makes your store accessible for everyone, helps to avoid fines
- Inc 5000 | Shopify Parners | 20+ stores launched | 300+ active clients
- Need help with your Shopify store? Reach out to us!
seandz
Excursionist
52 3 9

Hi Evita, I know it's a React function but i was curious why your examples prefer it to a simpler useState() call? What advantages is there to doing it with the pattern in your examples?

jackcohub
New Member
1 0 3

I'm also curious about why this is so common in Polaris, any chance we could get an explanation for this?

EugeneKim
Shopify Partner
60 3 20

Also curious about this as there doesn't seem to be a need to return a memoized callback function.

Georgekpc
Shopify Partner
17 0 2

This is still a mystery. I am very curious why they overuse useCallback() in their examples.

chenster
Shopify Partner
134 5 28

Perhaps its to avoid function not get re-built on every render cycle.  

 

https://infinitypaul.medium.com/reactjs-useeffect-usecallback-simplified-91e69fb0e7a3

Cartoo