【问题标题】:Why is my filter not working as expected?为什么我的过滤器没有按预期工作?
【发布时间】:2018-11-14 20:44:35
【问题描述】:

我有一组从数据库中提取的 Gym Classes,这是它的日志:

当它被拉出时,它们会被放入两个不同的数组中:

gymClasses: [],
filteredClasses: [],

然后,当用户单击其中一个下拉列表时,它会使用 this.filterClasses(event.target.value); 获取所选下拉列表的值

然后运行这个的函数:

filterClasses(value) {
  const newFilteredClasses = this.state.gymClasses.filter( (value) => {
    return this.state.gymClasses.type === value;
  });

  this.setState({filterClasses: newFilteredClasses});
  console.log('values ', this.state.filteredClasses);
}

当我打开最后一个应该显示filteredClasses 的console.log 时,它显示的类与未过滤的类相同。

这是上次的结果

console.log('values ', this.state.filteredClasses);

任何帮助建议将不胜感激!

【问题讨论】:

  • 有一点需要注意,state updates may be async,所以控制台日志记录在它之后并不意味着你会得到你想要的状态。为此,您可以在setState 中使用回调函数。

标签: javascript reactjs function filtering


【解决方案1】:

在过滤器回调中,您正在检查

的类型
this.state.gymClasses.type === value

理想情况下,您应该使用回调param 而不是this.state.gymClasses.type

试试这个

filterClasses(selectedValue) {
  const newFilteredClasses = this.state.gymClasses.filter( (value) => {
    return value.type === selectedValue;
  });

  this.setState({filterClasses: newFilteredClasses});
}

【讨论】:

  • gymClasses.type type 表示类的类型而不是typeof
  • 我从filterClasses 方法得到的是,你想要gymClasses 中的过滤数组取决于所选值,对吗?
  • 正确,我有两个数组,一个叫gymClasses,它保持不变,filterClasses 显然被过滤了,我们想显示过滤后的类,但即使在改变它之后,我过滤后仍然得到 3 个类。
  • 您不能在setState 之后立即进行控制台。尝试安慰newFilteredClasses
  • 好点,我不应该在 setState 之后是 console.logging,如果我记录我得到一个空数组。 @Harish
猜你喜欢
  • 2019-12-21
  • 2023-01-11
  • 1970-01-01
  • 1970-01-01
  • 2020-02-29
  • 2013-07-01
  • 2021-08-19
  • 2017-12-26
  • 1970-01-01
相关资源
最近更新 更多