У меня есть userContext, который аутентифицирует пользователя.Это работает, но после успешного входа я хочу, чтобы пользователь был перенаправлен на панель инструментов.поэтому я использую this.props.history.push ('/ dashboard'); , но получаю сообщение об ошибке ниже.
TypeError: Невозможно прочитать свойство 'props' из неопределенного
Есть ли лучший способ сделать это?При использовании функции?
UserContext.js
import React, {useState, createContext, useEffect} from 'react'
import Firebase from 'firebase'
import { Redirect } from 'react-router'
export const UserContext = createContext();
export const UserProvider = props => {
const [user, setUser] = useState({
username: "blank",
loggendIn: false
});
var id = localStorage.getItem('id');
// check if its null
console.log(id);
useEffect(() => {
if (id != null) {
console.log('id is there');
// load user from realtime database
const dbOBJ = Firebase.database().ref().child("users").child(id);
dbOBJ.on('value', function(snapshot) {
setUser(snapshot.val());
});
} else {
console.log('no id :( ');
}
console.log(props.history);
this.props.history.push('/dashboard');
}, [id]);
return (
<UserContext.Provider value = {[user, setUser]} >
{ props.children}
</UserContext.Provider>
);
}
app.js
import React from 'react';
import NavBar from './components/navBar';
import Login from './components/login';
import Session from './components/session';
import Dashboard from './components/dashboard';
import './App.css';
import Container from '@material-ui/core/Container';
import {BrowserRouter as Router, Route, Switch} from 'react-router-dom';
import { UserProvider } from './model/UserContext'
function App() {
return (
<div>
<UserProvider>
<Session />
<NavBar />
<Container maxWidth="sm">
<Router>
<Route path='/Login' component={Login} />
<Route path='/Dashboard' component={Dashboard} />
</Router>
</Container>
</UserProvider>
</div>
);
}
export default App;