TypeError: signUp не является функцией - React Native Redux Typo - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь изучить основы редукса и прохожу курс удэми. Я сталкиваюсь с той же проблемой, что и в приведенном ниже сообщении, но я несколько раз просматривал свой код и не вижу никаких синтаксических ошибок. Я надеялся, что кто-то может указать, где я тукнул код.

Регистрация не является функцией, регистрация не определена ошибка React Native

регистрация не является функцией. (В регистрации ({userName: userName, password: password}) ',' регистрация 'не определена);

import React, {useState, useContext} from 'react';
import {StyleSheet, View, TextInput, Button, TouchableOpacity, Text } from 'react-native'
import config from '../config';
import {Context as AuthContext} from '../context/AuthContext';

const LoginForm = ({navigation}) => {
    const { state, signup } = useContext(AuthContext);
    const [userName, setUserName] = useState('');
    const [password, setPassword] = useState('');
    const [error, setError] = useState('');
    const [loggedIn, setLoggedIn] = useState(false);

    loginSuccess = () => {
        setLoggedIn(true);
        navigation.navigate('mainFlow');
    };

    loginFailed = () => {
        setError('Login failure. Please try again.');
    };


    return (
    <View style = {styles.container}>
        <TextInput placeholder = "username or email"
            placeholderTextColor= "rgba(255, 255, 255, 0.7)"
            returnKeyType="next"
            keyboardType="email-address"
            autoCapitalize="none"
            autoCorrect={false}
            value={userName}
            onChangeText={setUserName}
            style ={styles.input}/>
        <TextInput placeholder = "password"
            placeholderTextColor= "rgba(255, 255, 255, 0.7)"
            returnKeyType="go"
            secureTextEntry
            value={password}
            onChangeText= {setPassword}
            style = {styles.input}/>
        <TouchableOpacity style = {styles.buttonContainer} onPress={()=> signup({userName, password})}>
            <Text style={styles.buttonText}> 
                LOGIN 
            </Text>
        </TouchableOpacity>
    </View>
    );
};

const styles = StyleSheet.create({
    container: {
        padding: 20
    },
    input: {
        height: 40, 
        backgroundColor: 'rgba(255, 255, 255, 0.2)',
        marginBottom: 15, 
        color: '#FFF',
        paddingHorizontal: 10
    },
    buttonContainer: {
        backgroundColor: '#2980b9',
        paddingVertical: 15
    },
    buttonText: {
        textAlign: 'center',
        color: '#FFFFFF',
        fontWeight: '700'
    },
    error : {
        fontSize: 20,
        color: 'red',
        fontFamily: 'Baskerville'
    }
});
export default LoginForm;

Примечание: я предполагаю, что это опечатка, потому что мой код такой же, какучебник и вышеупомянутая связанная проблема (кроме ее опечатки.

AuthContext. js Примечание: config - это мой файл аутентификации для Firebase. Я попытался удалить все в signup и только console.log, но яневозможно войти в функцию.

import CreateDataContext from './CreateDataContext';
import config from '../config';

const authReducer = (state, action) => {
    switch(action.type){
        default: 
            console.log('switch values: ' + state);
            return state;
    };
};

const signup = (dispatch) => {
    return async ({userName, password})=>{
    try{
        // make an api request to sign up with email and password
        const user = {
            userName: userName,
            password: password,
        };

        const response = config.loginViaRedux(user);
        // if sign up was successful , we want to modify our state telling it the user was authenticated
        console.log('response: ' + response.data);
    } catch(e){
        // if sign up fails, we need to show an error message
        console.log('response error: ' + e.message);
    }
    };
};

const signIn = (dispatch) => {
    return({email, password})=>{
    };
};

const signOut = (dispatch) => {
    return({email, password})=>{
    };
};

export const {Provider, Context} = CreateDataContext (
    authReducer,
    {},
    {isSignedIn: false}
);

1 Ответ

0 голосов
/ 14 октября 2019

Я нашел проблему. Мне не хватало экспорта методов.

Я добавил:

export const {Provider, Context} = CreateDataContext (
    authReducer,
    {signIn, signOut, signup},
    {isSignedIn: false, errorMessage: ''}
);

и метод теперь виден!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...