问题:监听器在回调中使用变量的旧值
我试图找到一个适当的方法来传递一个变量回调。回调函数应该使用变量的相关值。
const [title, setTitle] = useState('');
useEffect(() => {
notificationListener.current = Notifications.addNotificationReceivedListener(() => {
foo(title);
});
return () => {/* Removing Listener */};
}, [])
title
随时间变化,foo()
应得到相应的title
值。
到目前为止我想到的解决方案:
- 在useRef()中保留值而不是useState()
- 销毁并重新创建侦听器更改
title
但是没有一个看起来是最优的方法。请帮助。
不创建匿名函数,您可以为侦听器创建一个函数并将其封装在useCallback
中const callbackFunc = useCallback(()=>{
foo(title)
},[title])
现在你的useEffect将是
useEffect(() => {
notificationListener.current = Notifications.addNotificationReceivedListener(callbackFunc);
return () => {/* Removing Listener */};
}, [])