【问题标题】:Filter a value from dropdown reactjs从下拉reactjs中过滤一个值
【发布时间】:2020-07-09 22:20:26
【问题描述】:

我的屏幕上有多张卡片。每张卡片都将字符串显示为“Popular”/“Latest”/“Old”。我从后端获得卡上的这些值。我必须实现过滤选项,根据流行度、最旧等过滤这些卡片。到目前为止我已经这样做了,但不知道如何过滤这些卡片。

<Dropdown
                          id="sorting"
                          items={this.sortOptions}
                          itemToString={(item) => (item ? item.label : "")}
                          onChange={this.onChange}
                          name="sorting"
                          label="All"
                          titleText="Sort"
                          type="default"
                        />
 sortOptions = [
    { value: "Popular", label: "Popular" },
    { value: "Old", label: "Old" },
    { value: "Latest", label: "Latest" },
  ];

OnChange 方法:

onChange = (event) => {
    let filtered = this.sortOptions.filter(
      (val) => val.value === ProductState.Old
    );
    console.log("filtered", filtered);
  };

控制台输出:Object { value: "Old", label: "Old" } 但我想根据下拉列表中选择的值过滤我的卡片。谁能帮我解决这个问题。

【问题讨论】:

  • 您似乎正在尝试自己过滤过滤器选项。你指的这些“卡片”是什么?
  • 在过滤器函数内部,与事件值进行比较。
  • @David Cards 包含这些值作为字符串。假设我有 10 张卡片,其中 3 张卡片为“旧”,4 张卡片为“流行”,依此类推。因此,如果我从下拉列表中选择“流行”,那么我只想在屏幕上显示 4 张卡片
  • @Singh:这些“卡片”在您的组件中的什么位置?如果您还没有实现它们,那么这将是您尝试过滤它们之前的第一步。
  • 我已经创建了这些卡片,但没有在上述问题中编写该代码

标签: javascript reactjs typescript drop-down-menu filtering


【解决方案1】:

您只需将 onChange 函数更改为:

   onChange = (event) => {
    let filtered = this.cardArray.filter( // change cardArray according to your name
      (card) => card.tag === event.value // change tag according to your card code
    );
   setCardArray(filtered) // change setCardarray according to your setState function
  };

基本上,您使用下拉列表的选定值过滤您的卡片状态,并使用过滤后的数组更新卡片状态。

现在你在错误的数组上使用了过滤器函数。

【讨论】:

  • 什么是setArrayCard?我没有得到这个:根据您的 setState 函数更改 setCardarray
  • 如果您使用钩子,它是您的 cardArray 的 setState 函数。如果您使用的是 React.Components,请使用 this.setState({cardVariableHere: filtered}) 进行更改
【解决方案2】:

我认为,您目前遇到了数据局部性问题。

首先确定需要过滤的数据来自哪里,存储在哪里。

onChange 方法仅对用户输入“做出反应”。例如,如果您打开下拉菜单并选择一个选项,则会触发 onChange 方法。您的 onChange 方法中的“事件”包含您刚刚单击的选项。

onChange = (事件) => {

};

将事件记录到控制台并查看如何访问其中的数据。

onChange = (event) => {

    console.log("dropDownOnChangeEvent", event);
  };

现在您必须使用选定的“sortOption”来正确调用您从中获取卡片的后端,或者如果您的浏览器中已经有所有数据,请对这些数据应用过滤器方法。

【讨论】:

  • 我在我的控制台中得到了这个: Object { value: "Popular", label: "Popular" } 但真的不知道它会如何过滤我包含“Popular”、“Old”的卡片, “最新”
  • 包含这些值作为字符串的卡片。假设我有 10 张卡片,其中 3 张卡片为“旧”,4 张卡片为“流行”,依此类推。因此,如果我从下拉列表中选择“流行”,那么我只想在屏幕上显示 4 张卡片
  • 如何应用过滤方法,从一开始就是我的问题:D
猜你喜欢
  • 1970-01-01
  • 2019-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-28
  • 2021-11-11
  • 2017-05-17
相关资源
最近更新 更多