html - 如何在 React 中构建高级过滤器组件?

标签 html css reactjs advanced-filter react-functional-component

<分区>


想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post .

关闭 3 年前

尽管进行了许多研究,但我似乎并没有完全找到我正在寻找的东西。我正在构建一个房地产 react 应用程序,在搜索页面中,我希望能够根据价格范围、卧室数量、浴室数量、房屋类型来过滤结果。我看了一些教程,但我不太确定他们是否指出了正确的方向。我想使用功能组件, react 钩子(Hook),没有 redux 或 MobX,也没有 css 框架。是否有必要使用 </form>标签?我们如何在数组上动态应用多个过滤器?因为过滤器将处理从存储在数组中的 api 下载的本地数据。我想要尽可能多的解释。这是一个例子: enter image description here

最佳答案

您正在从 API 获取数据并将其提供给您的组件。现在,这个过滤器组件有一个数据的本地副本,将用于过滤。我无法评论您将如何在组件中创建过滤器(从 UI 的 Angular 来看)。我可以建议使用 lodash库一次对一组对象应用各种过滤器。我能想到的例子之一是 -

var location = 'Miami, FL'
var priceFrom = $2000;
var priceTo = $3000;

var filterFunctions = _.overEvery([locationFilter, priceFilter]);

locationFilter(data) {
  return data.filter(o => o.location === location);
}

priceFilter(data) {
  return data.filter(o => o.price >= priceFrom && o.price <= priceTo);
}

var result = yourData.filter(filterFunctions);

要检查用户选择了哪些过滤器的状态,您需要在组件的本地状态中维护它。我猜,将其声明为对象数组的最佳方式。推送过滤器及其在用户更改/选择时的值。如果用户取消选择它,则将其从数组中删除。例如,如果用户从位置下拉菜单中选择某些内容,则将值推送到数组中(如果尚不存在)。否则根据名称更新值。该数组应该如下所示(假设是 React 组件):

this.state.filters = [{name: 'price', value: 2000},
   {name: 'location', value: 'Miami, FL'}];

现在使用这个数组来决定你想应用什么过滤函数:

locationFilter(location) {
  return this.state.yourData.filter(o => o.location === location);
}


var result;
filters.map(f => {
  switch(f.name) {
    case 'location':
      result = locationFilter(f.value);
      break;
    case 'price':
      result = priceFilter(f.value);
      break;
  }
  // result contains filtered result
});

关于html - 如何在 React 中构建高级过滤器组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59350360/

上一篇:javascript - 个别输入值不会改变

下一篇:css - 由于 css 干扰 bootstrap css,复选框内的刻度线大小减小

相关文章:

javascript - 同时处理两个API

javascript - 在 Meteor React 客户端中显示所有用户

java - 使用 Java 标准库将 HTML 字符转换回文本

html - 在 Safari 上加载小图像

html - CSS Transition 元素进出 flexbox 平滑动画

javascript - 在更改该页面上的类时定向到另一个页面

html - CSS 3 渐变不适用于 chrome/firefox

javascript - nextProps 未显示在我的 componentWillRecieveProps 中

JavaScript 变量卡在循环内 - 无法访问

javascript - jquery中如何给文本加下划线