我一直在四处搜寻,尽管我发现了其他类型重定向的不同方法,但我还没有找到帮助我处理这个问题的方法。在本地存储加载页面时发生的反应重定向
这个想法是我需要在localstorage上保存一个sessionID变量,我将使用它来确定用户是否已登录到应用程序中,以便我可以将他/她重定向到相应的页面。但是我一直无法这样做。这里是我到目前为止的代码:
import React, { Component } from 'react';
import './App.css';
import Header from './components/Header/Header';
import Footer from './components/Footer/Footer';
import Home from './components/Home/Home';
import VideoGrid from './components/VideoGrid/VideoGrid'
import { Route, Redirect } from 'react-router-dom';
class App extends Component {
constructor(props){
super(props);
this.state = {sessionID: "-2", sendToGrid: false};
}
componentDidMount() {
if(this.state.sessionID === "-1"){
console.log("session is not started");
console.log(this.state.sendToGrid);
} else {
console.log("session has started");
this.setState({ sendToGrid: true });
console.log(this.state.sendToGrid);
}
}
render() {
const { redirect } = this.state;
console.log("must be sent to grid: " + redirect.sendToGrid);
var landingPage;
if(redirect.sendToGrid){
landingPage = <Home />
} else {
landingPage = <VideoGrid />
}
return (
<div className="App">
<Header />
<Route exact={true} path="/" component={Home} />
<Route path="/videogrid" component={VideoGrid} />
{landingPage}
<Footer />
</div>
);
}
}
export default App;
虽然我没有加入localStorage的变量(如果有人能告诉我怎么做,我会很感激的)我使用的是燃烧的字符串作为预留位置。所以,我的想法是,一旦componentDidMount()
被执行,我会改变我的状态来告诉渲染会话是否已经开始,但是,一旦我将它写在控制台日志上,就表明它是“未找到的”。我的想法是,如果会话已经开始(即它在localStorage上设置,并且未设置为“-1”),则应该显示VideoGrid页面而不是主页(具有登录表单)。
任何帮助将不胜感激!
编辑:
我编辑了我这样的代码:
import React, { Component } from 'react';
import './App.css';
import Header from './components/Header/Header';
import Footer from './components/Footer/Footer';
import Home from './components/Home/Home';
import VideoGrid from './components/VideoGrid/VideoGrid'
import { Route, Redirect } from 'react-router-dom';
class App extends Component {
constructor(props){
super(props);
this.state = {sessionID: "-2", sendToGrid: false};
}
componentWillMount() {
if(this.state.sessionID === "-1"){
console.log("session is not started");
console.log(this.state.sendToGrid);
} else {
console.log("session has started");
this.setState({ sendToGrid: true });
console.log(this.state.sendToGrid);
console.log(this.state);
}
}
componentDidMount() {
if(this.state.sessionID === "-1"){
console.log("session is not started");
console.log(this.state.sendToGrid);
} else {
console.log("session has started");
console.log(this.state.sendToGrid);
console.log(this.state);
}
}
render() {
return (
<div className="App">
<Header />
<Route exact={true} path="/" render={(props) => {
if(this.state.sessionID === "-1")
return <Home />;
else
return <VideoGrid />;
}} />
<Route path="/videogrid" component={VideoGrid} />
<Footer />
</div>
);
}
}
export default App;
而且我发现了以下错误:
编辑2:
Hadn没有保存所需的组件,因此显示错误o编辑。
@palsrealm提供的答案解决了我的问题。
按照你的答案,我改变了我的代码到这个: '<路线确切= {真}路径= “/” 渲染= {(道具)=> { 如果(这一点。 state.sessionID === “-1”) 返回 别的 返回 }} /> <路由路径= “/ videogrid” 成分= {VideoGrid} />' 但我发现了该错误: “元素类型无效:预期为字符串(对于内置组件nts)或类/函数(用于复合组件),但得到了:object。您可能忘记从您在“ –
KeOt777
”中定义的文件中导出组件,您可以发布您的编辑代码吗?或者提供一个codesandbox.io? – palsrealm
编辑我的代码并发布它 – KeOt777