useRef.current 即使在 useEffect 钩子中也是未定义的
useRef.current is undefined even in useEffect hook
我是 React 和 React-Native 的初学者。我正在尝试为分析设置 Firebase。我正在使用 react-native-redux 和 react-native-redux-persist。也使用反应导航。
来自 App.js 在我的 React Native 应用程序中的代码:
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 native redux 和 firebase。
更新
useEffect 有时会在应用程序重新加载后循环调用,即使我在 useEffect() 中传递了一个空数组。
更新
删除 PersistGate JSX 标签后,它工作正常。请告诉我如何解决这个问题。
当我在一个单独的组件中提取完整的 <NavigationContainer>
并在其中使用 useEffect
时,这是有效的。仍然不知道根本原因是什么。
它只是在加载时未定义。你想要的是使用 useCallback 因为你在加载后设置 ref。查看 https://reactjs.org/docs/hooks-faq.html#how-can-i-measure-a-dom-node
我是 React 和 React-Native 的初学者。我正在尝试为分析设置 Firebase。我正在使用 react-native-redux 和 react-native-redux-persist。也使用反应导航。
来自 App.js 在我的 React Native 应用程序中的代码:
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 native redux 和 firebase。
更新
useEffect 有时会在应用程序重新加载后循环调用,即使我在 useEffect() 中传递了一个空数组。
更新
删除 PersistGate JSX 标签后,它工作正常。请告诉我如何解决这个问题。
当我在一个单独的组件中提取完整的 <NavigationContainer>
并在其中使用 useEffect
时,这是有效的。仍然不知道根本原因是什么。
它只是在加载时未定义。你想要的是使用 useCallback 因为你在加载后设置 ref。查看 https://reactjs.org/docs/hooks-faq.html#how-can-i-measure-a-dom-node