reactjs - TypeError: Não é possível ler a propriedade 'useMemo' de null, motor js: hermes
Sou novo em React Native e estou tentando integrar o login do Google do Firebase no meu aplicativo. Estou usando TypeScript. Recebi inesperadamente esses erros após tentar executar meu código no meu emulador XCode no modo de compilação
E estou recebendo esses erros. Também não usei nenhum hook useMemo
ERRO Aviso: Chamada de hook inválida. Hooks só podem ser chamados dentro do corpo de um componente de função. Isso pode acontecer por uma das seguintes razões:
1. Você pode ter versões incompatíveis do React e do renderizador (como o React DOM)
2. Você pode estar violando as Regras dos Hooks
3. Você pode ter mais de uma cópia do React no mesmo aplicativo
Veja https://reactjs.org/link/invalid-hook-call para dicas sobre como depurar e corrigir este problema.
ERRO TypeError: Não é possível ler a propriedade 'useMemo' de nulo, engine js: hermes
ERRO Violação de Invariante: "main" não foi registrado. Isso pode acontecer se:
* Metro (o servidor de desenvolvimento local) está sendo executado a partir da pasta errada. Verifique se o Metro está em execução, pare-o e reinicie-o no projeto atual.
* Um módulo falhou ao carregar devido a um erro e `AppRegistry.registerComponent` não foi chamado., mecanismo js: hermes
Eu tentei diferentes soluções do Stack Overflow, mas nenhuma conseguiu resolver meu problema
Aqui está meu index.ts
import { AppRegistry} from "react-native";
import { registerRootComponent } from "expo";
import App from "./App"
AppRegistry.registerComponent("App", () => App);
registerRootComponent(App);
Aqui está meu App.tsx
import React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import LoginScreen from './src/components/LoginScreen';
import SignUpScreen from './src/components/SignUpScreen';
import ForgotPasswordScreen from './src/components/ForgotPassword';
import OtpScreen from './src/components/OtpScreen';
const Stack = createStackNavigator();
const App = () => {
return (
<NavigationContainer>
<Stack.Navigator initialRouteName="Login">
<Stack.Screen name="Login" options={{headerShown: false}} component={LoginScreen} />
<Stack.Screen name="SignUp" options={{headerShown: false}} component={SignUpScreen} />
<Stack.Screen name="ForgotPassword" options={{headerShown: false}} component={ForgotPasswordScreen} />
<Stack.Screen name="OTP" options={{headerShown: false}} component={OtpScreen} />
</Stack.Navigator>
</NavigationContainer>
);
};
export default App;
Aqui está minha tela de login onde estou tentando implementar meu login com o Google
import React, { useState, useEffect } from 'react';
import { View, Text, TextInput, StyleSheet, Button, TouchableOpacity } from 'react-native';
import { promptAsync, request, response } from '../firebase/firebase.sign-in.util';
import { LinearGradient } from 'expo-linear-gradient';
import { GoogleAuthProvider, signInWithCredential } from 'firebase/auth';
import {auth} from '../firebase/firebase.util';
const LoginScreen = ({ navigation }: { navigation: any }) => {
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const handleLogin = () => {
console.log('Login button pressed');
};
useEffect(()=>{
if(response?.type == "success"){
const {id_token} = response.params;
const credential = GoogleAuthProvider.credential(id_token);
signInWithCredential(auth, credential)
}
},[response])
return (
<LinearGradient
colors={['#CACACA', '#053C4E']}
start={{ x: 0, y: 0 }}
end={{ x: 1, y: 1 }}
style={styles.container}
>
<Text style={styles.title}>Login</Text>
<TextInput
style={styles.input}
placeholder="Email"
placeholderTextColor="#f6f6f6"
value={email}
onChangeText={setEmail}
/>
<TextInput
style={styles.input2}
placeholder="Password"
placeholderTextColor="#f6f6f6"
secureTextEntry={true}
value={password}
onChangeText={setPassword}
/>
<TouchableOpacity onPress={() => navigation.navigate('ForgotPassword')}>
<Text style={styles.forgotPassword} >Forgot Password ?</Text>
</TouchableOpacity>
<TouchableOpacity style={styles.loginButton} onPress={() => promptAsync()}>
<Text style={styles.loginButtonText}>Login</Text>
</TouchableOpacity>
Eu passei pela maioria das soluções do Stack Overflow e nenhuma funcionou para mim