1
我有一個Redux應用程序,它顯示基於一組過濾器(用戶輸入)的屬性列表。Redux - 減速器取決於其他狀態
我的狀態的簡單描述:
filters
- 過濾值的對象...properties
- 頁面上可用的所有屬性的回購visibleProperties
- 與當前的過濾器屬性列表應用
問題是我在調度&時設置了一個新的過濾值,我需要過濾properties
基於filters
新狀態並將結果存儲在visibleProperties
中。
所以我想出了這個解決方案:
export function setBedroomFilter (value) {
return (dispatch, getState) => {
// 'SET_FILTER' action
dispatch(setFilter('bedroom', parseInt(value)))
// New state
const { filters, properties } = getState()
// 'FILTER_PROPERTIES' action (Depending on new state)
dispatch(filterProperties(properties, filters))
}
}
而且visibleProperties
減速機可以做的工作:
// case 'FILTER_PROPERTIES'...
visibleProperties = action.properties.filter(item => item.bedroom >= action.filters.bedroom)
是這種做法完全好?
意見建議:這聽起來像是您在redux商店中複製了您的屬性。你應該在redux中存儲唯一的_filter state_,並在容器級執行_actual_過濾。你不必派遣另一個動作來過濾,因爲容器會自動過濾掉根據道具傳遞的屬性(過濾器和屬性)。 – thgaskell
謝謝,很好的建議。不過,我爲了這個問題簡化了我的例子。我有'重複''屬性'狀態的原因,是因爲其中一個_keeps_基於當前過濾器序列化的過濾列表的緩存版本。所以(我認爲)我無法按照你的建議(在容器中過濾)做,因爲我會丟失特定的過濾列表,並且如果稍後應用相同的過濾器,將不得不再次過濾。因此,我調用一個(更多)動作來過濾「屬性」並將結果緩存在所謂的重複「屬性」狀態中。是否有意義? – eightyfive