将Redux阵列过滤器反应到地图

时间:2019-11-26 17:18:02

标签: react-redux

你好,我想过滤我的减速器中的状态。将其显示在平面列表中。

很遗憾,我的状态仅被过滤一次。

Reducer怎么了??

这是youtube视频 https://www.youtube.com/watch?v=u1Y2PtLk-ck

const initialState = {
  data: ''
}

export default (state = initialState, { type, payload }) => {
  switch (type) {
    case 'FETCH_DATA':
      return { ...state, data: payload }
    case 'ORDER':

      return {
        ...state,
        data: state.data.filter(user => user.dob.age >= payload.minAge && user.dob.age <= payload.maxAge)
          .map(user => user)
      }
    default:
      return state
  }
}

1 个答案:

答案 0 :(得分:1)

订单操作1:

state.data =以前的state.data,已过滤为仅包括老年人

订单操作2:

state.data =以前的state.data(以前过滤为仅包括老年人),再次过滤为仅包括老年人和年轻人。结果是一样的,因为现在只有老年人(来自以前的结果)才在此数据集中。

Redux: what is the correct way to filter a data array in reducer?

https://redux.js.org/recipes/computing-derived-data

tl; dr

  1. 尝试将计算的属性(如过滤后的数据)保留在mapStateToProps函数中,而不是在reducer中
  2. 如果这些mapStateToProps函数被重用,则可能要查看选择器/重新选择库
  3. 如果您坚持将过滤后的数据存储在化简器中,请使用filteredData之类的单独属性代替data,这样它不会被覆盖

此外,您可以删除.filter()之后的.map(),因为它没有执行任何操作(仅返回已经存在的相同元素)。