【发布时间】:2017-07-18 08:54:26
【问题描述】:
我正在做一个简单的反应应用程序,我有一个 App 组件,它跟踪状态然后呈现它。起初状态是一个空字符串。之后,当我访问 /signin 时,我单击一个将状态从“”更改为“Marc”的按钮,并通过道具将其传递给在其页面上呈现用户名称的 Profile 组件。问题是它不会改变状态,它总是“”。我尝试调试,状态始终为“”,但实际上调用了 setState 方法。所以我不知道为什么。谁能帮我?提前致谢,附上代码。
应用程序:
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>
);
}
}
登录:
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>
);
}
}
简介:
export default class Profile extends React.Component {
constructor(props) {
super(props)
}
render() {
return(
<h1>I am {this.props.session} User</h1>
);
}
}
【问题讨论】:
-
Profile 组件仅在您更改路线时才会显示道具,我没有看到您更改。你也看到控制台中的一些错误
-
不,我在控制台中看不到任何错误。那么,如果我希望个人资料页面在单击登录页面上的按钮时更改用户,我该怎么办?
-
但我只想改变 App 父级的状态。然后如果我去 /profile 只看到更新。不可能吗?
-
是的,只要您通过链接导航并且不使用配置文件 url 刷新页面,因为本地状态更改丢失,它应该可以工作
标签: reactjs react-native react-router react-redux setstate