我是初学者,要进行反动和本机反应。我正在尝试设置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标签后,它可以正常工作。请让我知道如何解决此问题。
答案 0 :(得分:1)
当我在单独的组件中提取完整的<NavigationContainer>
并在其中使用useEffect
时,此方法有效。仍然不知道根本原因是什么。
答案 1 :(得分:0)
仅在加载时未定义。您想要的是使用useCallback,因为您要在加载后设置ref。查看https://reactjs.org/docs/hooks-faq.html#how-can-i-measure-a-dom-node