Reactでログインページを実装しようとしています。私は2つの入力フィールド(IDとパスワード)と送信ボタンを持つログインコンポーネントを持っています。このボタンはMaterial-Uiボタンコンポーネントです。ボタンには、idとパスワードが正しいかどうかを確認するonClickメソッドがあります。その場合は、別のコンポーネントにルーティングする必要があります。React-router v4 route on clickボタン
class Connexion extends React.Component {
constructor(props) {
super(props);
this.state = {
identifiant: '',
password: '',
errorMessage: ''
};
this.checkIdentifiantAndPassaword = this.checkIdentifiantAndPassword.bind(this);
this.handleIdentifiantChange = this.handleIdentifiantChange.bind(this);
this.handlePasswordChange = this.handlePasswordChange.bind(this);
}
handleIdentifiantChange(e) {
this.setState({
identifiant: e.target.value
});
}
handlePasswordChange(e) {
this.setState({
password: e.target.value
});
}
checkIdentifiantAndPassword(e) {
let { identifiant, password } = this.state;
if (!identifiant) {
console.log('check identifiant');
this.setState({
errorMessage: 'Identifiant vide ou incorrect.'
});
return;
}
if (!password) {
this.setState({
errorMessage: 'Mot de passe vide ou incorrect.'
});
return;
}
console.log(this.props);
this.props.onLogin(true);
console.log('Succés');
}
render() {
let { errorMessage } = this.state;
return (
<Paper elevation={4} >
<Typography type="display2" className="text-center header_title">Connexion</Typography>
<div className="row content_container">
<div className="small-4 small-centered columns">
<Typography type="body2" className="loginError">{errorMessage}</Typography>
<form>
<TextField required value={this.state.identifiant} onChange={this.handleIdentifiantChange} label="Identifiant" type="text" className="txtField" marginForm />
<TextField required value={this.state.password} onChange={this.handlePasswordChange} label="Mot de passe" type="password" className="txtField" marginForm />
<Button raised color="primary" className=" btn" onClick={this.checkIdentifiantAndPassword}>Se connecter</Button>
</form>
</div>
</div>
</Paper>
);
}
}
私の問題は、onClickハンドラ経由で別のコンポーネントにリダイレクトする方法がわかりません。私は以下のようにNavLinkにボタンコンポーネントを包むように多くのソリューションを試してみました:
<NavLink to="/new" ><Button raised color="primary" className=" btn" onClick={this.checkIdentifiantAndPassword}>Se connecter</Button></NavLink>
しかし、私はcheckIdentifiantAndPasswordメソッドの最初の行でエラーが発生します。
Cannot read property 'state' of null
私がいることを知っていますボタンコンポーネントを削除して、NavLinkのみを使用し、のすべてのクラスを追加ボタンコンポーネントt o NavLinkしかし、私はこの回避策が嫌いです。
誰かが私がこれをどのように達成できるかという考えを持っていますか?私はReact-router v4を使用しています。 ありがとうございます。
Henriqueありがとうございます。私は他の人のために以下の全体のソリューションを投稿します。 – Alee