私は単純な反応アプリケーションを実行しています。私は状態を追跡してレンダリングするAppコンポーネントを持っています。最初は状態が空の文字列です。その後、/ signinにアクセスすると、状態を ""から "Marc"に変更するボタンをクリックし、そのページにユーザーの名前を表示するProfileコンポーネントにprops経由で渡します。問題は状態を変更しないことであり、常に ""です。デバッグしようとしましたが、状態は常に ""ですが、実際にsetStateメソッドが呼び出されます。だから私は理由を知らない。誰でも助けてくれますか?事前に感謝し、コードを囲みます。React setStateが状態を設定しない
APP:
export default class App extends React.Component {
constructor(props) {
super(props);
this.state = {
session: ""
};
this.updateUser = this.updateUser.bind(this);
}
updateUser() {
this.setState({
session: "Marc"
});
}
render() {
return(
<BrowserRouter>
<Switch>
<Route path exact='/' component={Home}/>
<Route path='/profile' render={(props) => (
<Profile session={this.state.session} />
)}/>
<Route path='/signin' render={(props) => (
<SignIn onClick={this.updateUser} />
)}/>
</Switch>
</BrowserRouter>
);
}
}
SIGNIN:
export default class SignIn extends React.Component{
constructor(props) {
super(props);
this.handleClick = this.handleClick.bind(this);
}
responseGoogle (googleUser) {
const mail = googleUser.profileObj.email;
const familyName = googleUser.profileObj.familyName;
const name = googleUser.profileObj.name;
//this.changeName(mail);
alert("Mail: " + mail + "\n" + "Nom i Cognoms: " + name + "\nSuccessfully Logged In");
}
handleClick() {
this.props.onClick();
}
render() {
return (
<div>
<GoogleLogin
clientId="CLIENTID"
onSuccess={this.responseGoogle}
onFailure={this.responseGoogle}
buttonText="Google"/>
<button onClick={this.handleClick}>Instant User</button>
</div>
);
}
}
PROFILE:あなたのケースでは
export default class Profile extends React.Component {
constructor(props) {
super(props)
}
render() {
return(
<h1>I am {this.props.session} User</h1>
);
}
}
プロファイルコンポーネントは、ルートを変更したときにのみプロンプトを表示しますが、私はあなたには変化が見られません。また、コンソールに何らかのエラーが表示されますか? –
いいえコンソールにエラーが表示されません。では、サインインページのボタンをクリックしたときにプロファイルページでユーザーを変更したい場合、どうすればいいですか? – marc1161
これを見てくださいhttps://stackoverflow.com/questions/44127739/programatically-routing-based-on-a-condition-with-reactrouter/44128108#44128108 –