簡體   English   中英

領域偵聽器中的狀態未定義(領域和 React Native)

[英]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”。

https://medium.com/geographit/accessing-react-state-in-event-listeners-with-usestate-and-useref-hooks-8cceee73c559

  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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM