× Ошибка типа: Не удается уничтожить свойство «Текущий пользователь» объекта (…) (…)», поскольку оно не определено

# #javascript #reactjs #firebase #authentication

Вопрос:

Для создания индивидуального частного маршрутизатора в соответствии с currentUser приведенным ниже кодом:

AuthContext.js:

 import React, {useState, useEffect, useContext} from 'react';
import {auth} from '../Database/Firebase';

const AuthContext = React.createContext();

const useAuth = () => {
          return useContext(AuthContext);
}

const AuthProvider = (props) =>{
          const [currentUser, setCurrentUser] = useState({});
          const signup = (email, password) =>{
                    return auth.createUserWithEmailAndPassword(email, password);
          }

          const login = (email, password) =>{
                    return auth.signInWithEmailAndPassword(email, password);
          }
          
          const logout =() =>{
                    return auth.signOut();
          }

          useEffect(() =>{
                    const unscubscribe = auth.onAuthStateChanged((user) =>{
                              setCurrentUser(user);
                    });
                    return unscubscribe;
          }, []);

          return (
                    <AuthContext.Provider value={{currentUser, signup, login, logout}}>
                    {props.children}
                    </AuthContext.Provider>
          );
}

export { AuthProvider, useAuth};
 

PrivateRoute.js:

 import React from 'react';
import { Route, Redirect } from 'react-router-dom';
import {useAuth} from "../UserAuthentication/AuthContext";

const PrivateRoute = ({component: Component, ...rest}) => {
          const {currentUser} = useAuth();
          return (
                    <Route
                              {...rest}
                              render = {(props) =>{
                                        return currentUser ? (<Component {...props} />) : (<Redirect to='/login' />)
                              }} >
                    </Route>
          );
}

export default PrivateRoute;
 

Проблема в прикрепленном файле, чтобы показать ошибку:
введите описание изображения здесь

Примечание: Я пытаюсь найти эту ошибку, но я должен ее решить, и я думаю, что смогу это сделать с помощью членов stackoverflow. Теперь я объявил объекты const {currentUser} = useAuth(); как, и они взяты из AuthContext.js файла с тем же именем. Но почему он показал ошибку, я не знаю.

Комментарии:

1. Вы использовали AuthProvider где-нибудь выше на дереве, чем там, где вы используете PrivateRoute ?

Ответ №1:

Вам нужно использовать AuthProvider его, прежде чем вы сможете его использовать useAuth . Измените значение контекста для него undefined , и вы получите ошибку, как вы ее видите.

Комментарии:

1. Спасибо за ваши инструкции, все решено.