我嘗試在React中實現登錄頁面。我有一個包含2個輸入字段(ID和密碼)和一個提交按鈕的登錄組件。這個按鈕是Material-Ui按鈕組件。該按鈕有一個onClick方法,用於檢查ID和密碼是否正確。如果是這樣,它必須路由到另一個組件。React-router v4路由點擊按鈕
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的所有類NavLink,但我不喜歡這種解決方法。
難道有人有我如何才能做到這一點的想法。我正在使用React-router v4。 謝謝。
謝謝恩裏克。我將下面的整個解決方案發布給其他人。 – Alee