Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 警告:从submitForm()捕获到未处理的错误,[TypeError:undefined不是对象(正在计算';_context.t0.response.data';)]_Javascript_React Native_Formik - Fatal编程技术网

Javascript 警告:从submitForm()捕获到未处理的错误,[TypeError:undefined不是对象(正在计算';_context.t0.response.data';)]

Javascript 警告:从submitForm()捕获到未处理的错误,[TypeError:undefined不是对象(正在计算';_context.t0.response.data';)],javascript,react-native,formik,Javascript,React Native,Formik,我是新手。我有一条错误信息,不知从哪里开始。我试图回到我的git版本,在出错之前,他继续说 警告:从submitForm()捕获到未处理的错误,[TypeError:undefined不是对象(正在计算'\u context.t0.response.data')] 错误出现在我的登录页面中,我使用Formik处理表单,使用knex处理数据库。(我正在使用mysql)。 当我测试失眠时,后端工作正常。 我将把代码放在下面 登录页面 import React from 'react'; impo

我是新手。我有一条错误信息,不知从哪里开始。我试图回到我的git版本,在出错之前,他继续说

警告:从submitForm()捕获到未处理的错误,[TypeError:undefined不是对象(正在计算'\u 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>
    );
}
从“React”导入React;
从“@expo/vector icons”导入{Feather};
从“react native”导入{View、Image、Text、TouchableOpacity、AsyncStorage};
从'@react-navigation/native'导入{useNavigation};
从“../../services/api”导入api;
从“./styles”导入样式;
从“../../assets/logo.png”导入logoImg;
从“../../assets/heromes.png”导入heroesImg;
从“../../components/LoginForm”导入{LoginForm};
导出默认函数登录({route,navigate}){
const navigation=useNavigation();
函数navigateToRegister(){
导航。导航('Register',route.params);
}
函数navigateBack(){
navigation.goBack();
}
异步函数handleLogin(值){
const{email,password}=值;
试一试{
const rota=route.params.route;
const response=wait api.post(rota,{email,password});
如果(route.params.userType=='ong'){
const{ong,token}=response.data;
等待AsyncStorage.multiSet([
['userToken',token],
['userName',ong.name],
['userId',ong.id],
['userType',route.params.userType]
])
navigation.navigate('Profile'))
}
否则{
if(route.params.userType==='user'){
const{user,token}=response.data;
等待AsyncStorage.multiSet([
['userToken',token],
['userName',user.name],
['userId',user.id],
['userType',route.params.userType]
])
导航。导航('事件')
}
否则{
抛出新错误(“Falha”);
}
}
}捕捉(错误){
警报(`Falha无登录${err.response.data.error}`)
}
}
返回(
国歌
);
}
形式

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>
);
从“React”导入React;
从“Formik”导入{Formik,ErrorMessage};
从“样式化组件/本机”导入样式化;
从“是”以是的形式导入*;
export const LoginForm=props=>(
props.onSubmit(值)}
validationSchema={
是的。对象()形状({
email:Yup.string().email('email invalido').required('email is required!'),
密码:Yup.string().required('需要密码!')
})}
>
{({handleChange,handleBlur,handleSubmit,value,errors})=>(
登录
诱捕者
)}
);

很抱歉用英语回答。

当您销毁响应对象时,您正在使用“ong”

const {ong, token} = response.data;
但是它没有ong属性,所以您应该使用如下所示的user属性

const {user, token} = response.data;
这些路线也应该改变

  await AsyncStorage.multiSet([
                    ['userToken', token],
                    ['userName', user.name],
                    ['userId', user.id],
                    ['userType', route.params.userType]
                ])
另外,最好检查response.data是否为null,并正确处理它