【问题标题】:Where did I make the mistake of changing my search filter? And how to fix it?我在哪里犯了更改搜索过滤器的错误?以及如何解决?
【发布时间】:2020-03-06 10:04:18
【问题描述】:

我有一个起飞或到达机场的飞机列表,我还有一个搜索过滤器,我可以在其中输入到达或离开的时间并过滤飞机。我使用我的 API 的 actual 属性来执行此操作。但我需要改变我的搜索。现在我需要按航班号搜索 - 我的 API 的 planeTypeID.code 属性。但是当我改变它时,停止显示飞机列表。我的错误是什么以及如何解决?

我只是在 actual 各处写了 ["planeTypeID.code"] 并删除方法: .split("-").reverse().join("-")

旧版本:
小部分 plane.js(reducer)

case "RUN_FILTER":
      var newData = state.data[action.shift || state.shift].filter(x => {
        return (
          x.actual &&               
          x.actual.includes(         
            state.day
              .split("-")           
              .reverse()             
              .join("-")               
          )
        );
      });

    case "LOAD_DATA_END":
      var newData = action.payload.data[state.shift].filter(x => {
        return (
          x.actual &&                      
          x.actual.includes(                   
            action.payload.day
              .split("-")                             
              .reverse()                
              .join("-")                 
          )
        );
      });


小部分app.js(主要组件)

export function searchFilter(search, data) {
  return data.filter(n => n.actual.toLowerCase().includes(search)); 
}

/////////////////////////////////////// ///////////////////////////////////////// ///////////////////////////////////////// ////

新版本:

小部分飞机.js(减速器)

    case "RUN_FILTER":

      var newData = state.data[action.shift || state.shift].filter(x => {
        return (
          x["planeTypeID.code"] &&                   // Сhange 
          x["planeTypeID.code"].includes(            // Сhange 
            state.day
                                                      // delete                                
          )
        );
      });
      return Object.assign({}, state, {

    case "LOAD_DATA_END":
      var newData = action.payload.data[state.shift].filter(x => {
        return (
          x["planeTypeID.code"] &&                   // Сhange        
          x["planeTypeID.code"].includes(            // Сhange   
            action.payload.day
                                                     // delete                                    
          )
        );
      });

小部分app.js(主要组件)


export function searchFilter(search, data) {
  return data.filter(n => n["planeTypeID.code"].toLowerCase().includes(search)); // Сhange   
}


沙盒中的所有项目代码:
https://codesandbox.io/s/redux-ant-design-filter-table-column-with-slider-jj6mu

【问题讨论】:

  • 请修改你的代码,只留下重要的部分
  • @iLiA 完成。你能帮我吗?
  • 您的代码似乎不正确。我看到的第一件事是你在减速器中用括号返回数据。使用 return 您将返回对象(新状态),因此您应该使用 { } 代替。另外,您正在拆分state.day,因此您正在改变状态,这不是一个好习惯,因此它不会重新渲染组件,将day 映射为其道具。我的建议是仔细阅读 redux 的文档并在之后实施

标签: javascript reactjs redux


【解决方案1】:

x["planeTypeID.code"] 的示例值为“B734”,state.day“23-08-2019”=> 这些是 2 个不同的字段 => 当您按 x["planeTypeID.code"].includes(state.day) 过滤时,您将得到一个空数组¯\ _(ツ)_/¯

通过cmets调试后,最可能的解决方案是:

x["planeTypeID.code"].toLowerCase().includes(action.search || state.search)

我建议将Get Started with Debugging JavaScript 作为一般性的第一步,以解决以下问题:

我哪里做错了……

...在发布到 Stack Overflow 之前。

【讨论】:

  • 如何解决这个问题?我需要过滤planeTypeID.code
  • 既然您知道问题所在,您尝试过解决什么问题?
  • 解决问题需要了解预期的行为。我不明白预期会发生什么,因此我无法为您解决这个特定问题。 StackOverflow 在这里为有技术问题的人与可能知道答案的志愿者匹配;但您可以从工作场所更资深的团队成员的指导中获益更多。
  • 假设planeTypeID.code 部分是正确的,那么state.day 是不正确的,您必须将其替换为与州航班号相关的内容,例如action.flightNumber || state.flightNumber 但我在您所在的州没有看到类似的情况。您将用户提供的航班号信息存储在哪里?
猜你喜欢
  • 1970-01-01
  • 2023-03-24
  • 2021-01-22
  • 2014-05-23
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
相关资源
最近更新 更多