2017-04-02 77 views
1

說我有一個相當簡單的嵌套,獲取對象。陣營終極版深度嵌套的對象

它包含了許多信息和模式是固定的。

有些項目被嵌套這樣的:

obj:{ 
    one:{ 
    x: "A", 
    y: "B", 
    more:{ 
     z: [1, 2], 
     0: "C", 
     extra: { 
     a1: "b1", 
     a2: "b2" 
     } 
    } 
    } 
} 

這是因爲它去深。

終極版存儲該信息的罰款。

爲什麼不能我找回one.more.0或反應one.more.extra.a1

我能得到one.x

我可以設置狀態one.more,然後檢索0.0,但不.extra.a1

據我所知,應該是這個原因,但是在這個簡單的用例存在,我感到不安,它需要箍使用這既是方便和有效,否則信息。

任何建議,以解決這個問題,並不涉及正火/重新設計數據,以適應包裝?

理想世界:this.props.aReducer.one.more.extra.a1

非常感謝

編輯* 這是可能的,或者必須這樣嵌套值皺在了一起預渲染:

render(){ 
    return(
    <div> 
     {this.props.aReducer.one.more.extra.a1}<br /> 
    </div> 
) 
} 
+0

文檔說的是什麼? –

+0

對不起,不完全確定你的意思。反應明智,從我讀,反應不會處理深層嵌套的對象。 –

+0

你的意思是說它沒有,沒有理由給予? –

回答

2

該問題不是深度嵌套的對象,而更可能是您的狀態的默認值或缺少驗證。爲了呈現one.more.extra.a1路徑的每個部分都必須存在,即one必須是一個對象,並將more作爲對象與extra作爲對象(extra不必具有a1屬性以正確呈現,因爲它只會返回未定義的對象拋出一個錯誤)。嘗試獲取未定義的屬性將始終引發錯誤。這通常意味着狀態未正確初始化,或者您沒有檢查以確保路徑的每個部分都存在。檢查路徑的各個部分

方式一:

var a1 = 'Some default value'; 
if (one && one.more && one.more.extra) { 
    a1 = one.more.extra.a1; 
} 

另一種選擇是使用類似lodash的_.getlink這確實這個檢查你。

+0

是的,所以如果我在初始狀態下定義整個結構,它不應該拋出錯誤,但我以狀態爲例。我只想渲染除了這個場景之外還有的redux道具。國家應該沒有任何影響,或者我錯了嗎? –

+0

我錯了。我很久以前就寫過這個商店,我忘記了它除了組件狀態之外還有它自己的默認狀態。這對我來說很愚蠢。感謝您的幫助。 –

+0

沒問題 - 很高興你將它分類。 –