即使在useEffect挂钩中,useRef.current也未定义

时间:2020-04-19 02:57:52

标签: reactjs react-native redux react-redux redux-persist

我是初学者,要进行反动和本机反应。我正在尝试设置Firebase进行分析。我正在使用react-native-redux-persist与react-native-redux-persist。还使用了反应导航。

我的本​​机应用中来自App.js的代码:

const App = () => {
  const routeNameRef = React.useRef(null);
  const navigationRef = React.useRef(null);

  React.useEffect(() => {
    console.log('hrhr');
    console.log(routeNameRef);
    console.log(navigationRef);
    const state = navigationRef.current.getRootState();

    // Save the initial route name
    routeNameRef.current = getActiveRouteName(state);
  }, []);

  return (
    <Provider store={persistStore.store}>
      <PersistGate loading={null} persistor={persistStore.persistor}>
        <NavigationContainer
          ref={navigationRef}
          onStateChange={state => {
            const previousRouteName = routeNameRef.current;
            const currentRouteName = getActiveRouteName(state);

            if (previousRouteName !== currentRouteName) {
              // The line below uses the @react-native-firebase/analytics tracker
              // Change this line to use another Mobile analytics SDK
              analytics().setCurrentScreen(currentRouteName, currentRouteName);
            }

            // Save the current route name for later comparision
            routeNameRef.current = currentRouteName;
          }}>
           {/***/}
        </NavigationContainer>
      </PersistGate>
    </Provider>
  );
};

日志:

LOG  hrhr
LOG  {"current": undefined}
LOG  {"current": undefined}

版本:

"react": "16.13.1",
"react-native": "0.61.5",

该应用还依赖于React本机Redux和Firebase。

更新

在重新加载应用程序后,有时会在循环中调用

useEffect,即使我在useEffect()中传递了一个空数组。

更新

删除PersistGate JSX标签后,它可以正常工作。请让我知道如何解决此问题。

2 个答案:

答案 0 :(得分:1)

当我在单独的组件中提取完整的<NavigationContainer>并在其中使用useEffect时,此方法有效。仍然不知道根本原因是什么。

答案 1 :(得分:0)

仅在加载时未定义。您想要的是使用useCallback,因为您要在加载后设置ref。查看https://reactjs.org/docs/hooks-faq.html#how-can-i-measure-a-dom-node