【发布时间】:2018-08-23 18:28:30
【问题描述】:
该组件应该在登录后重定向到主页,但之前它工作过,然后突然它根本不起作用,重定向继续回到root('/')
这是 index.js 中的代码(我使用的是 material-kit 主题):
import React from "react";
import ReactDOM from "react-dom";
import { createBrowserHistory } from "history";
import { Router, Route, Switch } from "react-router";
import indexRoutes from "routes/index.jsx";
import "assets/scss/material-kit-react.css?v=1.1.0";
var hist = createBrowserHistory();
ReactDOM.render(
<Router history={hist}>
<Switch>
{indexRoutes.map((prop, key) => {
return <Route path={prop.path} key={key} component=
{prop.component} />;
})}
</Switch>
</Router>,
document.getElementById("root")
);
这里是 index.jsx 里面
var indexRoutes = [
{ path: "/login-page", name: "LoginPage", component: LoginPage },
{ path: "/register-page", name: "RegisterPage", component: RegisterPage },
{ path: "/home-page", name: "HomePage", component: Home},
{ path: "/", name: "LandingPage", component: LandingPage }
];
export default indexRoutes;
这里是登录页面
class LoginPage extends React.Component {
constructor() {
super();
this.state = {
cardAnimaton: "cardHidden",
signInEmail: "",
signInPassword: "",
isSignIn: false,
errorLogin: "",
user: {
id: "",
name: "",
email: "",
joined: ""
}
};
}
//load user
loadUser = (data) => {
// update user
this.setState({
user: {
id: data.id,
name: data.name,
email: data.email,
joined: data.joined
}
})
}
onEmailChange = (event) => {
this.setState({ signInEmail : event.target.value})
}
onPasswordChange = (event) => {
this.setState({ signInPassword : event.target.value})
}
//submit change
onSubmitSignIn = () => {
fetch('http://localhost:3001/signin', {
method: 'post',
headers: {'Content-Type' : 'application/json'},
body: JSON.stringify({
email: this.state.signInEmail,
password: this.state.signInPassword
})
})
.then(response => response.json())
.then( user => {
if(user.id){
this.loadUser(user)
this.setState({ isSignIn: true})
}else{
this.setState({ errorLogin: "Please check your email and password"})
}
})
}
render() {
const { classes, ...rest } = this.props;
const { errorLogin } = this.state;
if( this.state.isSignIn === true){
return <Redirect
to="/home-page" />
}
return (
<div>
<div
className={classes.pageHeader}
>
<Particles className={classes.particles}
params={ particlesOptions}
/>
<div className={classes.container}>
<GridContainer justify="center">
<GridItem xs={12} sm={12} md={4}>
<Card className={classes[this.state.cardAnimaton]}>
<form className={classes.form}>
<CardHeader className={classes.cardHeader}>
<h3>Login</h3>
</CardHeader>
<CardBody className={classes.cardbody}>
<FormControl fullWidth className={classes.signinform}>
<InputLabel htmlFor="email-address">Email</InputLabel>
<Input
type="email"
name="email-address"
id="email-address"
onChange={this.onEmailChange}
endAdornment={
<InputAdornment position="end">
<Email className={classes.inputIconsColor}/>
</InputAdornment>
}
/>
<InputLabel htmlFor="password" className={classes.passwordlabel}>Password</InputLabel>
<Input
type="password"
name="password"
id="password"
onChange={this.onPasswordChange}
endAdornment={
<InputAdornment position="end">
<LockOutline className={classes.inputIconsColor}/>
</InputAdornment>
}
/>
</FormControl>
</CardBody>
{(errorLogin) ?
<SnackbarContent
message={errorLogin}
className={classNames(classes.root, classes.message)}
/>
: ""
}
<CardFooter className={classes.cardFooter}>
<p className={classes.divider}>Don't have an account?
<Link to='/register-page'>
Register
</Link>
</p>
<div className={classes.buttonplace}>
<Button className={classes.buttonsingin} size="sm" onClick={this.onSubmitSignIn} >
Sign In
</Button>
</div>
</CardFooter>
</form>
</Card>
</GridItem>
</GridContainer>
</div>
</div>
</div>
);
}
}
当我直接尝试它时它工作但在登录页面尝试这样做后路径更改为/home-page一会儿然后返回/,我不知道为什么它突然不起作用,因为它之前工作过,有没有错误
【问题讨论】:
-
安装了什么版本的 react-router?
-
@azium react router v4
-
您的代码看起来像是 3 和 4 的奇怪组合。v4 有
react-router-dom并直接导出路由器,无需将历史传递给它 -
@azium 这是我使用材料套件主题时的默认设置。在此之前我没有遇到任何问题,当我尝试登录路径更改片刻然后再次返回“/”时,即使我尝试仅以更简单的方式渲染组件
标签: reactjs react-router react-router-v4