2017-07-27 21 views
0

我在Redux回聲系統中找到了自己的方法,並且遇到了以下的問題:假設我有一個應該連接到REDX的React組件狀態部分使用選擇器,但這部分尚不存在(未定義)。所以,在運行時,我得到一個「得到未定義的」錯誤。是否有可能以某種方式定義選擇器並將其連接到組件,即使狀態部分尚不存在?我如何創建一個還不存在的狀態的REDX選擇器

我使用的是重新選擇創建的選擇,這是我使用,以避免引發錯誤解決方法:

import { createSelector } from 'reselect'; 

const selectLogin = (state) => state 

const loginDataSelector =() => createSelector(
    selectLogin, 
    (authState) => authState.get("auth")? 
    authState.get("auth").get('loginData'):undefined 
); 

export { 
    loginDataSelector 
}; 

通過這種方式,selectLogin選擇似乎監控整個狀態樹上。有沒有更好的方法來做到這一點,或者是否有一個對未定義(尚未設置)狀態部分的選擇器的最佳做法?

+1

如果你那塊狀態設置爲最初的一些默認值是什麼? –

+0

這意味着我應該爲這個狀態部分使用一個reducer,對吧?這對我來說似乎有點太過分了,因爲我只需要讀取狀態部分,而不是寫入(來自此組件)。此外,在另一個組件中還有一個用於此狀態部分的簡化器,尚未被調用。 出現的一個相關問題是,如果有一種方法可以將已經存在的組件連接到狀態部件之後,它已經被初始化/渲染等。這將避免「非存在狀態」問題。 –

回答

1

您可以使用ES6默認值來解決此問題。

而且不使用getIn,使您可以安全地訪問深性質

import { createSelector } from 'reselect'; 
import { Map } from 'immutable'; 

const selectLogin = (state) => state 

const loginDataSelector = createSelector(
    selectLogin, 
    (authState = Map()) => authState.getIn(["auth", "loginData"]) 
); 
相關問題