Warning: An unhandled error was caught from submitForm(), [TypeError: undefined is not an object (evaluating '_context.t0.response.data')]
Warning: An unhandled error was caught from submitForm(), [TypeError: undefined is not an object (evaluating '_context.t0.response.data')]
我是 React Native 的新手。我有错误消息,不知从何而来。我试图回到我的 git 版本,在错误之前,他继续。
警告:从 submitForm() 捕获了一个未处理的错误,[TypeError: undefined is not an object (evaluating '_context.t0.response.data')]
错误出现在我的登录页面,我使用 Formik 处理表单,使用 knex 处理数据库。 (我正在使用 mysql)。
当我测试失眠时,后端工作正常。
我把代码放在下面。
登录页面
import React from 'react';
import { Feather } from '@expo/vector-icons';
import { View, Image, Text, TouchableOpacity, AsyncStorage } from 'react-native';
import { useNavigation } from '@react-navigation/native';
import api from '../../services/api';
import styles from './styles';
import logoImg from '../../assets/logo.png';
import heroesImg from '../../assets/heroes.png';
import { LoginForm } from '../../components/LoginForm';
export default function Login({route, navigat}){
const navigation = useNavigation();
function navigateToRegister(){
navigation.navigate('Register', route.params);
}
function navigateBack(){
navigation.goBack();
}
async function handleLogin(values){
const { email, password } = values;
try {
const rota = route.params.route;
const response = await api.post(rota, { email, password });
if (route.params.userType === 'ong'){
const {ong, token} = response.data;
await AsyncStorage.multiSet([
['userToken', token],
['userName', ong.name],
['userId', ong.id],
['userType', route.params.userType]
])
navigation.navigate('Profile')
}
else {
if (route.params.userType === 'user'){
const {user, token} = response.data;
await AsyncStorage.multiSet([
['userToken', token],
['userName', user.name],
['userId', user.id],
['userType', route.params.userType]
])
navigation.navigate('Incidents')
}
else {
throw new Error ('Falha');
}
}
} catch(err){
alert(`Falha no Login ${err.response.data.error}`)
}
}
return(
<View style={styles.container}>
<View style={styles.header}>
<Image source={logoImg} />
<TouchableOpacity
onPress={navigateBack}>
<Feather name='arrow-left' size={16} color='#e02041' />
</TouchableOpacity>
</View>
<LoginForm onSubmit={handleLogin} />
<Image
source={heroesImg}
style={styles.imageBackground} />
<TouchableOpacity
style={styles.button}
onPress={navigateToRegister}>
<Text style={styles.buttonText}> Crie sua Conta</Text>
</TouchableOpacity>
</View>
);
}
形式
import React from 'react';
import { Formik, ErrorMessage } from 'formik';
import styled from 'styled-components/native';
import * as Yup from 'yup';
export const LoginForm = props => (
<Formik
initialValues={{
email: '',
password: '' }}
onSubmit={(values) => props.onSubmit(values)}
validationSchema ={
Yup.object().shape({
email: Yup.string().email('Email invalido').required('Email is required!'),
password: Yup.string().required('Password is required!')
})}
>
{({ handleChange, handleBlur, handleSubmit, values, errors }) => (
<View>
<Title>Login</Title>
<Input
textContentType= 'emailAddress'
placeholder= 'Email'
onChangeText={handleChange('email')}
onBlur={handleBlur('email')}
value={values.email}
/>
<ErrorMessage component={ErrMessage} name='email' />
<Input
placeholder = 'Password'
secureTextEntry= {true}
textContentType = 'password'
onChangeText={handleChange('password')}
onBlur={handleBlur('password')}
value={values.password}
/>
<ErrorMessage component={ErrMessage} name='password' />
<Button onPress={handleSubmit}>
<ButtonText>Entrar</ButtonText>
</Button>
</View>
)}
</Formik>
);
对不起英语。
当您销毁响应对象时,您正在使用 'ong'
const {ong, token} = response.data;
但这确实有一个 ong 属性 所以你应该像下面这样使用用户 属性
const {user, token} = response.data;
这些行也应该更改
await AsyncStorage.multiSet([
['userToken', token],
['userName', user.name],
['userId', user.id],
['userType', route.params.userType]
])
另外最好检查response.data是否不为null,妥善处理
我是 React Native 的新手。我有错误消息,不知从何而来。我试图回到我的 git 版本,在错误之前,他继续。
警告:从 submitForm() 捕获了一个未处理的错误,[TypeError: undefined is not an object (evaluating '_context.t0.response.data')]
错误出现在我的登录页面,我使用 Formik 处理表单,使用 knex 处理数据库。 (我正在使用 mysql)。
当我测试失眠时,后端工作正常。
我把代码放在下面。
登录页面
import React from 'react';
import { Feather } from '@expo/vector-icons';
import { View, Image, Text, TouchableOpacity, AsyncStorage } from 'react-native';
import { useNavigation } from '@react-navigation/native';
import api from '../../services/api';
import styles from './styles';
import logoImg from '../../assets/logo.png';
import heroesImg from '../../assets/heroes.png';
import { LoginForm } from '../../components/LoginForm';
export default function Login({route, navigat}){
const navigation = useNavigation();
function navigateToRegister(){
navigation.navigate('Register', route.params);
}
function navigateBack(){
navigation.goBack();
}
async function handleLogin(values){
const { email, password } = values;
try {
const rota = route.params.route;
const response = await api.post(rota, { email, password });
if (route.params.userType === 'ong'){
const {ong, token} = response.data;
await AsyncStorage.multiSet([
['userToken', token],
['userName', ong.name],
['userId', ong.id],
['userType', route.params.userType]
])
navigation.navigate('Profile')
}
else {
if (route.params.userType === 'user'){
const {user, token} = response.data;
await AsyncStorage.multiSet([
['userToken', token],
['userName', user.name],
['userId', user.id],
['userType', route.params.userType]
])
navigation.navigate('Incidents')
}
else {
throw new Error ('Falha');
}
}
} catch(err){
alert(`Falha no Login ${err.response.data.error}`)
}
}
return(
<View style={styles.container}>
<View style={styles.header}>
<Image source={logoImg} />
<TouchableOpacity
onPress={navigateBack}>
<Feather name='arrow-left' size={16} color='#e02041' />
</TouchableOpacity>
</View>
<LoginForm onSubmit={handleLogin} />
<Image
source={heroesImg}
style={styles.imageBackground} />
<TouchableOpacity
style={styles.button}
onPress={navigateToRegister}>
<Text style={styles.buttonText}> Crie sua Conta</Text>
</TouchableOpacity>
</View>
);
}
形式
import React from 'react';
import { Formik, ErrorMessage } from 'formik';
import styled from 'styled-components/native';
import * as Yup from 'yup';
export const LoginForm = props => (
<Formik
initialValues={{
email: '',
password: '' }}
onSubmit={(values) => props.onSubmit(values)}
validationSchema ={
Yup.object().shape({
email: Yup.string().email('Email invalido').required('Email is required!'),
password: Yup.string().required('Password is required!')
})}
>
{({ handleChange, handleBlur, handleSubmit, values, errors }) => (
<View>
<Title>Login</Title>
<Input
textContentType= 'emailAddress'
placeholder= 'Email'
onChangeText={handleChange('email')}
onBlur={handleBlur('email')}
value={values.email}
/>
<ErrorMessage component={ErrMessage} name='email' />
<Input
placeholder = 'Password'
secureTextEntry= {true}
textContentType = 'password'
onChangeText={handleChange('password')}
onBlur={handleBlur('password')}
value={values.password}
/>
<ErrorMessage component={ErrMessage} name='password' />
<Button onPress={handleSubmit}>
<ButtonText>Entrar</ButtonText>
</Button>
</View>
)}
</Formik>
);
对不起英语。
当您销毁响应对象时,您正在使用 'ong'
const {ong, token} = response.data;
但这确实有一个 ong 属性 所以你应该像下面这样使用用户 属性
const {user, token} = response.data;
这些行也应该更改
await AsyncStorage.multiSet([
['userToken', token],
['userName', user.name],
['userId', user.id],
['userType', route.params.userType]
])
另外最好检查response.data是否不为null,妥善处理