[英]state inside realm listener is undefined (Realm and React Native)
我在 Realm 和 React Native 方面面臨以下問題。
在我的組件中,我想聽聽 Realm 的變化,這確實有效。 但是在偵聽器內部,我的狀態始終未定義 - 在偵聽器內部設置狀態后, useEffect 鈎子也不會觸發。 看起來偵聽器中的所有內容都無權訪問我的狀態對象。
我需要訪問偵聽器內部的狀態才能正確設置狀態。 我怎樣才能做到這一點?
編輯:狀態似乎總是過時的。 熱重載后,狀態正確,但始終落后於1次編輯。
const [premium, setPremium] = useState<boolean>(true);
const [settings, setSettings] = useState<any>({loggedIn: true, userName: 'XYZ'});
useEffect(() => {
console.log('updated settings'); // never gets called
}, [settings]);
useEffect(() => {
const tmp: any = settingsRealm.objects(MyRealm.schema.name)[0];
tmp.addListener(() => {
console.log(premium, settings); // both return undefined
if (premium) {
setSettings(tmp);
}
// for demonstration purposes
setSettings(tmp);
})
}, []);
對於任何有同樣問題的人:
添加一個引用狀態的 useRef,同時更新兩者(!)(狀態和引用)將解決問題。 現在,“premium”的所有實例(在偵聽器內)都必須更改為“premiumRef.current”。
const [premium, _setPremium] = useState<boolean>(true);
const [settings, setSettings] = useState<any>({loggedIn: true, userName: 'XYZ'});
const premiumRef = useRef<boolean>(premium);
const setPremium = (data) => {
premiumRef.current = data;
_setPremium(data);
}
useEffect(() => {
const tmp: any = settingsRealm.objects(MyRealm.schema.name)[0];
tmp.addListener(() => {
if (premiumRef.current) {
setSettings(tmp);
}
})
}, []);
[1]: https://medium.com/geographit/accessing-react-state-in-event-listeners-with-usestate-and-useref-hooks-8cceee73c559
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.