我一直在try 为我一直在做的网店项目制作一个类别过滤器.我对Reaction/JavaScript还是个新手,所以我可能遗漏了一些非常明显的东西.

 {!loading
            ? webshopData.categories?.map((item) => {
                const filtered = products.filter((obj) =>
                  item.products.$each.includes(obj._id)
                );

                return (
                  <div
                    className="productsCategorySelector"
                    onClick={() => setProducts(filtered)}
                    key={item.name}
                  >
                    <p className="label-form productsCategoryLabel">
                      {item.name}
                    </p>
                  </div>
                );
              })
            : null}

当我按下过滤器时,我的产品确实会被过滤,但我需要使用另一个功能来取回我的产品.它们保存在"ProductsUnsorted"钩子/状态中.

{!webshopData.categories && (
            <p style={{ marginBottom: 20 }}>All products</p>
          )}
          <p
            className="productsAllShow"
            onClick={() => setProducts(productsUnsorted)}
          >
            All products
          </p>

当我点击一个新的过滤器时,我如何总是将我的数组重置为默认值(显示所有产品)?现在,它只是覆盖了我用过滤函数所做的更改,这意味着如果我过滤了同一类别中的产品,它们将不会显示,直到我点击"reset"(productsUnsorted)switch .有没有什么方法可以在过滤之前将数组重置为"默认"状态.另一类?我怎样才能避免在应用了一个过滤器之后"不断改变我的数组"?

我已经在这里坐了几个小时想弄清楚这件事.我试了很多方法,但都不管用.我只是不明白我试图实现的背后的逻辑.

推荐答案

根据您的代码,您似乎正在对‘Products’数组中的数据进行排序,然后将其设置回‘Products’状态.如果我的理解有误,请告诉我.如果是这种情况,这意味着您的‘Products’数组将始终从以前筛选的产品中筛选出来.

若要避免此问题,最好使用"ProductUnsorted"数组,每次对数据进行排序,然后将排序后的数据存储到"Products"数组中.

const filtered = productsUnsorted.filter(
    (obj) => item.products.$each.includes(obj._id)
);

Javascript相关问答推荐

我的glb文件没有加载到我的three.js文件中

有Angular 的material .未应用收件箱中的价值变化

确定MutationRecord中removedNodes的索引

Bootstrap动态选项卡在切换选项卡后保持活动状态,导致元素堆叠

在这种情况下,如何 for each 元素添加id?

为什么promise对js中的错误有一个奇怪的优先级?

如何将Map字符串,布尔值转换为{key:string;value:bo布尔值;}[]?<>

Chart.js 4.4.2,当悬停在一个数据点上时,如何在工具提示中拥有多个数据点/标签?

如何在JavaScript文件中使用Json文件

您能在卸载程序(QtInsteller框架)上添加WizardPage吗?

提交链接到AJAX数据结果的表单

在浏览器中触发插入事件时检索编码值的能力

有条件重定向到移动子域

当我点击一个按钮后按回车键时,如何阻止它再次被点击

如何使用画布在另一个内部绘制一个较小但相同的形状,同时保持恒定的边界厚度?

无法设置RazorPay订阅API项目价格

输入的值的类型脚本array.排序()

在对象的嵌套数组中添加两个属性

MAT-TREE更多文本边框对齐问题

使用jQuery每隔几秒钟突出显示列表中的不同单词