【发布时间】:2019-09-27 13:27:17
【问题描述】:
我有一个正在对用户进行身份验证的 userContext。它正在工作,但在成功登录后,我希望将用户定向到 /dashboard。所以我正在使用 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;
【问题讨论】:
-
history属性从何而来?它通常通过来自 react-router 的withRouterHOC 注入。 -
你会这样使用'withRouter'吗? export const UserProvider = props => withRouter({
-
no...更像
const UserProvider = withRouter((props => {...});,但老实说,正常编写函数组件更容易,然后包装导出,如export default withRouter(UserProvider); -
这认为这是这样做的方法,但我得到一个错误尝试导入错误:'UserProvider' 不是从'./model/UserContext' 导出的。我正在导出函数
const UserProvider = props => { ... }export default withRouter(UserProvider);
标签: javascript reactjs react-router