私は、componentDidMountイベントで開始されたユーザーのID番号を取得する非同期要求が行われるプロファイルページにユーザーを導くログインページを持っています。結果が戻ったら、取得したデータでIDにsetStateを設定します。マウントされたコンポーネントまたはマウントされているコンポーネントのエラーのみを更新できます。条件付きレンダリング
import React, { Component } from 'react';
import {Navbar} from 'react-materialize';
import {Link, Redirect} from 'react-router-dom';
import helper from '../utils/helper';
import axios from 'axios';
import logo from '../logo.svg';
import '../App.css';
class Profile extends Component {
constructor(props){
super(props);
this.state = {id: null, loggedIn: true};
this.logOut = this.logOut.bind(this);
}
componentDidMount(){
axios.get('/profile').then((results) => {
if(!this._unmounted) {
this.setState({id: results.data})
}
})
}
logOut(event){
axios.post('/logout').then((results) => {
console.log(results);
})
this.setState({loggedIn: false});
}
render() {
if(!this.state.loggedIn){
return <Redirect to={{pathname: "/"}}/>
}
if(this.state.id == null){
return <Redirect to={{pathname: "/login"}} ref="MyRef" />
}
return (
<div>
<Navbar brand='WorldScoop 2.0' right>
<ul>
<li><Link to="#" onClick={this.logOut}>Logout</Link></li>
</ul>
</Navbar>
<h1>Profile Page</h1>
<h2>Welcome {this.state.id} </h2>
</div>
)
}
}
export default Profile;
誰かがURLに '/ profile'パスを入力してプロフィールページに移動できないようにしようとしています。これを行うには、私はidが適切なログインauthentication.Thatから取得されたかどうかに基づいて、条件付きのレンダリングを使用すると、
if(this.state.id == null){
return <Redirect to={{pathname: "/login"}} ref="MyRef" />
}
に気付いた場合、彼らはメールアドレスとパスワードを指定しない場合、これは、ログインページに戻って、ユーザーをリダイレクトする理由です試してみました。データを受信した後にプロファイルコンポーネントのマウントとアンマウントを確認しようとしましたが、エラーメッセージが表示されたままです。 マウントされたコンポーネントまたはマウントされているコンポーネントのみをアップデートできます。コンポーネントがアンマウントすると混乱します。
現在、ユーザーを/ loginにリダイレクトするコードはありますか? – Joey
私はユーザー資格情報を追加しても同じエラーで/ loginにリダイレクトされます。何らかの理由で、this.setState({id:results.data})。検索されたユーザーIDで状態を設定していません。私は条件付きのif(this.state.id == null){ return <パス名: "/ login"}} ref = "MyRef" /> }を追加するとこの問題が発生します。 – dalt25
yup thatsあなたのレンダリングメソッドが解決しているので、Axiosコールが終了する前にあなたに経路を変更しているので、 – Joey