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