gpt4 book ai didi

javascript - 的正确使用

转载 作者:行者123 更新时间:2023-11-29 10:57:02 32 4
gpt4 key购买 nike

阅读教程后,我设法弄清楚了 <Redirect /> 的用法。 , 在代码中:

import React from 'react';
import Login from './Login';
import Dashboard from './Dashboard';
import {Route, NavLink, BrowserRouter, Redirect} from 'react-router-dom';

const supportsHistory = 'pushState' in window.history;

export default class App extends React.Component {
constructor(props) {
super(props);
this.state = {
username: '',
password: '',
redirectToDashboard: false,
}
}

//-----------------------LOGIN METHODS-----------------------------
onChangeInput(e) {
this.setState({[e.target.name]:e.target.value});
}
login(e) {
e.preventDefault();
const mainThis = this;
if (mainThis.state.username && mainThis.state.password) {
fetch('APILink')
.then(function(response) {
response.text().then(function(data) {
data = JSON.parse(data);
if (!data.error) {
mainThis.setState({redirectToDashboard:true});
} else {
alert(data.msg);
}
})
})
} else {
alert('Username and Password needed');
}
}

renderRedirect = () => {
if (this.state.redirectToDashboard) {
return <Redirect exact to='/company' />
} else {
return <Redirect exact to='/login' />

}
}

render() {
let renderedComp;
return(
<BrowserRouter
basename='/'
forceRefresh={!supportsHistory}>
<React.Fragment>
{this.renderRedirect()}
<Route exact path="/company" render={()=><Dashboard/>} />
<Route exact path="/login" render={()=><Login login={(e)=>this.login(e)} onChangeInput={(e)=>this.onChangeInput(e)} />} />
</React.Fragment>
</BrowserRouter>
)
}
}

这会根据 this.state.redirectToDashboard 的值检查要显示的组件, 但因为:

onChangeInput(e) {
this.setState({
[e.target.name]:e.target.value
});
}

每次输入都会重新呈现页面,给我留​​下:

Warning: You tried to redirect to the same route you're currently on: "/login"

我知道是什么导致了这个警告,只是我想不出其他方法来让它工作。我应该做出哪些改变,或者至少应该提出一个想法才能使这项工作正常进行?

最佳答案

你可以包装你的 Route Switch 中的组件这将使一次只渲染它的一个子项。

然后您可以添加来自 / 的重定向至 /login作为第一个 child ,并保持重定向到 /companySwitch之外什么时候redirectToDashboardtrue .

示例

<BrowserRouter basename="/" forceRefresh={!supportsHistory}>
<div>
{this.state.redirectToDashboard && <Redirect to="/company" />}
<Switch>
<Redirect exact from="/" to="/login" />
<Route path="/company" component={Dashboard} />
<Route
path="/login"
render={() => (
<Login
login={e => this.login(e)}
onChangeInput={e => this.onChangeInput(e)}
/>
)}
/>
</Switch>
</div>
</BrowserRouter>

关于javascript - <Redirect/> 的正确使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55117272/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com