[英]React: Run handler, only at select renders, useCallback or useEffect?
I would like to run a function only when the variable phone
(see below) changes. 我只想在可变
phone
(请参阅下文)更改时运行功能。
Note: useMediaQuery
works as intended, it initiates re-render whenever the screen size changes above / below 768, and returns true / false. 注意:
useMediaQuery
按预期工作,每当屏幕大小更改为大于768或小于768时,它都会启动重新渲染,并返回true / false。
const phone = !useMediaQuery('(min-width:768px)'); // 768 and down: Smartphones
console.log('phone', phone);
useCallback(() => {
console.log('useCallback fired');
if (!phone) handleDrawerClose();
}, [phone])();
My above code fires the callback in useCallback
on every re-render. 我上面的代码在每次重新渲染时在
useCallback
触发回调。 Regardless if phone
changed. 无论
phone
更改。 I tried useEffect
and it partially works. 我尝试过
useEffect
,它部分起作用。
Why does not useCallback
work as intended? 为什么
useCallback
无法按预期工作?
What is the best approach here? 最好的方法是什么?
useCallback
returns a memoized function, which you then call. useCallback
返回一个记忆功能,然后您可以调用该功能。 As you call it, it gets executed. 正如您所说的,它会被执行。
What is the best approach here?
最好的方法是什么?
useEffect
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.