我是新來的ReactJS,但我有一個簡單的用例:我有一個登錄表單,設置用戶的狀態(全名等),然後使用React路由器browserHistory.push('/')回到主頁。我可以確認,如果我留在我的狀態實際得到保存的登錄頁面上,但是當我回到主頁並進入我的「父」組件(App.js)並在呈現方法之前運行此操作時:爲什麼我會失去我的ReactJS狀態?
console.log(this.state) // this returns null
它總是返回true。我的構造函數甚至沒有對狀態做任何事情。如果我在App.js父組件的構造函數中放入一個日誌,我可以驗證該頁面是否實際上沒有被重新加載,組件是否只安裝一次(至少App.js上的構造函數在整個過程中只調用一次主頁>登錄>主頁生命週期)。再一次,該國似乎在更改頁面後被刪除。
我錯過了什麼簡單的東西?
編輯:一些代碼,試圖簡化它:
// LoginForm.js
//Relevant method
handleSubmit() {
this.login(this.state.username, this.state.password, (success) => {
if (!success)
{
this.setState({ isLoggedIn: false })
this.setState({ loginError: true })
return
}
this.setState({ isLoggedIn: true })
browserHistory.push('/') // I can verify it gets here and if at this point I console.log(this.isLoggedIn) I return true
})
}
// App.js
class App extends React.Component {
constructor(props) {
super(props);
console.log('hello')
}
render() {
const { props } = this
console.log(this.state) // returns null
return (
<div>
<AppBar style={{backgroundColor: '#455a64'}}
title="ADA Aware"
showMenuIconButton={false}>
<LoginBar/>
</AppBar>
<div>
{props.children}
</div>
</div>
)}
//Part of my routes.js
export default (
<Route path="/" component={App}>
<IndexRoute component={HomePage}/>
<Route path="/login" component={LoginForm}/>
<Route path="*" component={NotFoundPage}/>
</Route>
);
如何共享代碼而不是試圖描述它? – naomik
哪個狀態?我們在討論多少個組件?你如何更新它? (分享一些代碼!) – gravityplanx
我添加了代碼,讓我知道如果這有幫助,試圖讓它到相關位 –