私は他の種類のリダイレクトのためにさまざまな方法を見つけましたが、私はこれを援助するものを見つけませんでした。ローカルリージョナルによるページリダイレクトへのリダイレクト
私は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()
がセッションが開始されたかどうかをレンダリングするように私の状態を変えてしまったのですが、const { redirect } = this.state;
をコンソールログに書き込むと、私はそれが "undefinded"であることを示しています。私の考えは、セッションが開始されている(つまり、localStorageに設定され、 "-1"に設定されていない)場合、ホームページ(ログインフォームを持つ)ではなくVideoGridページが表示されるはずです。
ご協力いただければ幸いです。
EDIT:
私はこのように私のコードを編集した:
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;
そして、私は次のエラーを取得しています:
EDIT 2:
HADN必要なコンポーネントを保存していないため、エラーが表示されますn編集します。
@palsrealmからの回答が私の問題を解決しました。あなたはstate
オブジェクトでredirect
キーを持っている必要があり
const {redirect} = this.state;
のような構造化代入オブジェクトを行うには
に必要な、私はこのに私のコードを変更: '<ルート正確な= {本当}パス= "/" レンダリング= {(小道具)=> { 場合(これ。 state.sessionID === "-1") リターン 他 リターン }} /> <ルートパス= "/ videogrid" コンポーネント= {videoGrid} /> ' が、私はこのエラーを取得しています: "要素の種類が無効です:文字列が必要です(組み込みのcompone nts)またはクラス/関数(コンポジットコンポーネント用)ですが、got:objectです。 「 –
KeOt777
」で定義したファイルからコンポーネントをエクスポートするのを忘れた可能性があります。編集したコードを投稿できますか?またはcodesandbox.ioを提供できますか? – palsrealm
自分のコードを編集して – KeOt777