我有一个带有单击事件的按钮,一旦用户成功登录,该按钮就会调用使API登录用户的函数。我想将用户重定向到/overview
。我不确定如何使用react-router-dom
进行操作,我所看到的一切都是通过react-router
使用Class Based Component
而不是使用的Function Based Component
来实现的。
下面是我的路线设置
import React from "react";
import { BrowserRouter as Router, Route } from 'react-router-dom';
import Login from "../../login/Login";
import Main from "../../main/Main";
const App = () => {
return (
<div className="App">
<Router>
<div className="App-container">
<Route path={"/login"} component={() => <Login />} />
<Route exact path={"/overview"} component={Main} />
</div>
</Router>
</div>
);
}
export default App;
这是我的LoginCard组件(内部登录组件),带有按钮和api调用功能
import React from 'react';
import { BrowserRouter as Router, Route, Redirect, Link } from 'react-router-dom';
import Button from '../button/Button';
import LoginService from '../../api/LoginService';
const LoginCard = (props) => {
const loginService = new LoginService();
const handleLogin = () => {
loginService.login(email, password)
.then((response) => {
// Want to redirect here?
});
}
return (
<div className="Login">
<Button onClick={handleLogin}>Login</Button>
</div>
);
};
export default LoginCard;
这是我尝试过的方法,但是由于查看其他线程而无效
<Redirect to="/overview"/>
<Redirect to={{ pathname: '/overview' }} />
我还看到人们提到props.location
或this.props.location
对我来说都是不确定的。
试图添加
import createBrowserHistory from "history/createBrowserHistory";
const history = createBrowserHistory();
<Router history={history}>
App.js中的及其使用
history.push
但是出现错误,说它不是一个函数。
所以不太确定该怎么做?我只想用react-router-dom
或通过Function Based Component
解决这个问题。任何帮助将不胜感激。
答案 0 :(得分:1)
由于LoginCard
是Login
的子组件,因此不会自动访问route props
。您可以将Route
更改为以下内容,然后将history
道具从Login
传递到LoginCard
:
<Route path="/login" component={Login} />
或者您可以使用withRouter
HOC将route props
注入到LoginCard
组件中。
const LoginCard = props => {
const loginService = new LoginService();
const handleLogin = () => {
loginService.login(email, password).then(response => {
props.history.push("/overview");
});
};
return (
<div className="Login">
<Button onClick={handleLogin}>Login</Button>
</div>
);
};
export default withRouter(LoginCard);
答案 1 :(得分:0)
如果您希望该用户登录,请同时查看privateRoute,它可以帮助保护您的网页
请查看本教程以获取更多详细信息 react auth tutorial click here
答案 2 :(得分:0)
您可以通过 render 方法(如
)有条件地返回它if(this.state.authenticated){
return <Redirect to={{ pathname: '/overview' }} />
}
,如果未通过身份验证,则返回登录ui
return (
<div className="Login">
<Button onClick={handleLogin}>Login</Button>
</div>
);