首页 > 解决方案 > 没有从 React-redux 获得回报

问题描述

我想在 React-Redux 中过滤我的商店的结果。因此,我创建了一个过滤器选择器。

我的代码只返回所有“购物者”,而它应该只返回过滤后的购物者。

每个购物者都有一组评论,其中包含(一个或多个)带有评论(文本)和评论编号的对象。我们要过滤评论编号。见打印屏幕:

在此处输入图像描述

因此,为了澄清,我想按购物者的评论进行过滤,如果该数字 >= 过滤器,则仅返回符合此条件的购物者。

我在这里做错了什么?我怎样才能让它只返回过滤后的结果?

export const selectShoppersWithFilters = (filters) => (state) => {
  let shoppers = [...state.publicShoppers];

  if (filters.minAverageReview) {
    return shoppers.filter((shopper) => {
      return shopper.reviews.map((review) => {
        if (review.review >= filters.minAverageReview) {
          return (shoppers = shopper);
        }
      });
    });
  }
  console.log(shoppers);
  return shoppers;
};

附言。请耐心等待,我是一名初级开发人员...

标签: reactjsreduxreact-reduxredux-selector

解决方案


假设您正在尝试过滤“至少有一条评论高于 minAverageReview”的购物者,我认为过滤功能就足够了,您不需要 map。

      return shoppers.filter((shopper) => {
        return
            shopper.reviews.some((review) => review.review >= filters.minAverageReview) 
      });

因此,在过滤器函数中,您传递一个检查每个元素的回调,并根据您自己的条件决定是否过滤掉该元素,回调函数必须返回一个布尔值。不满足条件的元素(回调返回 false)将被过滤掉。这里我的 some() 检查数组 (shopper.reviews) 是否至少有一个评论元素的评论高于 minAverageReview。


推荐阅读