2017-08-13 96 views
1

我想映射一個狀態,但是狀態(狀態的名稱是「任務」,它是父狀態的子狀態稱爲「時間表」,「時間表「狀態已經使用componentWillMount定義)仍然未定義直到一個動作創建者已經被觸發(點擊一個按鈕)在我的頁面內。但是,我已經在jsx中定義了timesheet.task.map,因此頁面無法加載,並顯示錯誤「無法讀取未定義的屬性映射」。 code 因此,您可以在這裏看到,我想從觸發事件時調用的狀態(它在頁面呈現時仍然未定義)映射一個'選擇'選項列表,但頁面不會加載,因爲當頁面首次加載時,timeheet.task仍未定義。初始化狀態起作用,解決頁面第一次呈現時undefined

你有任何想法如何解決這個問題嗎?我正在考慮初始化狀態,但我不知道該怎麼做。非常感謝!

回答

0

很常見的情況。在你render()的頂部 - 只需添加一個條件,以檢查是否該值是否有效..這樣的:

if (!this.state.timesheet.task) { 
    return <p> waiting for my value </p> // add any generic component to here that would await your value 
} 

根據您的頁面佈局,您可能希望只創建一個小的組成部分,以作爲注入有條件的,因爲你等待你的價值被填充。

+0

對不起,但它給我的網頁加載時會有無限的加載,因爲當它調用另一個動作創建器(它被放置在componentWillMount中)時,它自身的「按鈕」會被渲染。我正在考慮創建一個構造函數來給timeheet.task一個默認值,但我不知道該怎麼寫。你有什麼主意嗎? –