2017-03-10 68 views
3

我需要訪問我的容器內的redux狀態的特定屬性。這些屬性反過來將被用作獲取其他嵌套屬性並將它們映射到組件道具的關鍵。我使用immutableJS。訪問mapStateToProps中的狀態屬性

是在mapStateToProps內部執行此操作的最佳方法嗎?這是否會導致任何性能開銷或是否正常,因爲mapStateToProps已經接收整個狀態作爲參數?

下面是一個例子。

狀態選擇:

export const userSettingsState = state => state.get('userSettings'); 
export const transactionsState= state => state.get('transactions'); 

userSettings是不可變的地圖和交易也是一個Map,用戶ID和事務列表對。

const mapStateToProps = (state) => { 
    const curUID = userSettingsState(state).get('currentUserID'); 
    return { 
    trList: transactionsState(state).getIn([curUID, 'trList']) 
    }; 
}; 

我需要currentUID來訪問用戶事務。上述示例工作正常。但這是最好的方法嗎?

回答

1

偉大的問題。是的,這是處理計算道具並生成派生數據的首選方式。這不僅是最好的方式,也是非常高效的。 Cory House(一個在社區中很出名的React開發者)推文與a few days ago類似,他的相同方法適用於mapStateToProps()。您唯一的選擇是將計算方法添加到componentWillReceiveProps()componentDidMount()。你可以想象得到這個雜亂無章的速度。

現在,對你這樣做的方式有所保留。

不要把異步調用放在這裏!這也會導致渲染組件出現問題,因爲mapStateToProps()在組件安裝之前運行。如果您的組件在安裝之前正在等待承諾,您將獲得性能點擊。這可能很明顯。

說到性能,我個人生成的派生數據就是這樣一個下拉框,其中包含用戶輸入的8,600個條目,對這8,600個條目應用模糊過濾器,重新呈現下拉列表並顯示新的過濾條件名單。零性能問題並沒有像黃油那樣順暢。