2017-08-12 40 views
0

我是非常新的反應.. 有人建議使用精確的節點,而不是整個對象,就像在這種情況下的名稱。我也在努力處理異步行爲。如何在react-redux中使用精確節點?

@connect(state => ({ 
    user_name: state.user.name, 
    last_message: state.messages[state.messages.length-1] 
})) 

我派遣componentDidmount下動作載入我的初步數據,但我的用戶數據需要時間通過API來加載。 當我嘗試user_name: state.user.name在連接部分,我得到一個未定義的屬性錯誤,因爲仍在獲取數據並且代碼中斷。 要解決這個問題,請使用:user_name: state.user並嘗試通過下一個道具訪問名稱。 我正在做這個權利。

如何正確加載API數據。我正在使用redux和thios與axios。

回答

0

不一定是最好的做法,但你可以添加一個條件......

@connect(state => ({ 
    // check if the data is done loading 
    if (state.user.name) { 
    return { 
    user_name: state.user.name, 
    last_message: state.messages[state.messages.length-1] 
    valid: true 
    } 
    } 
    else return { 
    valid: false 
    } 
})) 

然後你呈現組件裏面,你可以在上面添加一個標誌,像

if (!props.valid) { 
    return <Loading /> 
} 

return (
... 
) 
+0

我應該遵循什麼作爲練習...定義在減速器初始狀態解決這個...我懷疑這.. 我可以使用承諾加載請求n然後繼續.. – Vivek

0

您只需可以把一個條件,以檢查用戶是否退出,然後從中獲取名稱作爲

@connect(state => ({ 
    user_name: state.user && state.user.name, 
    last_message: state.messages[state.messages.length-1] 
})) 

現在在你的代碼中,你將能夠訪問user_name,如果你沒有定義用戶undefined,只要你沒有試圖從user_name獲得另一個對象,它應該可以。但是,您可以檢查組件中的undefined值。

+0

我應該定義對象在我最初的對象......在還原器中 – Vivek

相關問題