Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Redux React应用程序中修复这些错误?_Javascript_Reactjs_Redux - Fatal编程技术网

Javascript 如何在Redux React应用程序中修复这些错误?

Javascript 如何在Redux React应用程序中修复这些错误?,javascript,reactjs,redux,Javascript,Reactjs,Redux,我有错误: Redux我刚开始学习,请帮助更正我的代码,我的Redux应用程序最终开始工作,因为它在纯React上工作。所有项目在这里我只写几个主要项目文件在这里我只写几个主要项目文件 这里我只写几个主要的项目文件 这里我只写几个主要的项目文件 这里我只写几个主要的项目文件 App.js(组件): 问题是你没有从API中得到任何回报(404)。见下图 这是因为组件加载时的${day}值是未定义的。因此,您的完整请求URL是https://api.iev.aero/api/flights/un

我有错误:

Redux我刚开始学习,请帮助更正我的代码,我的Redux应用程序最终开始工作,因为它在纯React上工作。
所有项目在这里我只写几个主要项目文件在这里我只写几个主要项目文件 这里我只写几个主要的项目文件 这里我只写几个主要的项目文件

这里我只写几个主要的项目文件

App.js(组件):


问题是你没有从API中得到任何回报(
404
)。见下图

这是因为组件加载时的
${day}
值是
未定义的
。因此,您的完整请求URL是
https://api.iev.aero/api/flights/undefined
它不返回任何内容

现在,您正在调度
加载数据\u启动
,因此当您到达减速器并点击
案例时“加载数据\u开始
行,
操作。日期仍
未定义
。因此对于
action.data
您将得到一个空数组。这将使我们进入
LOAD\u DATA\u END
,您可以将
shift
的状态值设置为等于
Object.keys(action.DATA)[0]
。由于
action.data
是空的,
对象。键(action.data)[0]
未定义的
,您的应用程序无法使用
未定义的
进行过滤。您需要为
this.state.day
设置一个默认值,并在初始提取时使用该值

更新1

您需要在初始获取中传递一个默认值。在您的
组件didmount
中尝试以下操作:

const days = ["23-08-2019", "24-08-2019", "25-08-2019"];

class Root extends React.Component {
    componentDidMount() {
      this.props.onFetchData(days[this.props.propReducer.day]);
    }
    ...
 }
无需导出
days
数组,只需将其声明为组件上方的变量即可

更新2

我已经更新了。这里发生了一些变化

首先,您的redux操作存储在
this.props
中,但您的redux状态存储在
this.props.propReducer
中,因此在渲染中我更改了变量,使其指向正确的位置

接下来,您将在加载数据结束后立即调度
SET\u SHIFT
,并将
DATA
作为有效负载传递。这是将
state.shift
设置为从初始提取返回的数据。因此,当您尝试按
state.shift
过滤数据时,除了第一次提取
componentDidMount
时,您正在尝试将
操作.data
分离到之前提取的所有数据的键处。我删除了这个,并将其完全设置为一个单独的操作

现在,为了正确过滤数据,我在
fetchData
中将检索到的数据和过去一天的作为负载中的两个值传递给
LOAD\u data\u END
,如下所示

 dispatch({ type: "LOAD_DATA_END", payload: { data, day } });
最后,在
“LOAD\u DATA\u END”
的情况下,我写了以下内容

 var newData = action.payload.data[state.shift].filter(x => {
    return (
      x.actual &&
      x.actual.includes(
        action.payload.day
          .split("-")
          .reverse()
          .join("-")
      )
    );
  });
  return Object.assign({}, state, {
    data: action.payload.data,
    shift: Object.keys(action.payload.data)[0],
    filteredData: searchFilter(state.search, newData)
  });
这里发生的事情是,首先通过
state.shift
键分离
action.payload.data
,该键返回一个数组,即到达或离开。然后,我根据哪些航班的
实际
(我假设是实际的到达/离开日期和时间)过滤这个数组,其中包括过去的一天。但是我必须颠倒日期,因为在
actual
中,时间看起来像
2019-08-24T00:27:49Z
,而日期看起来像
24-08-2019
。这也是为什么我使用了
includes
而不是
==
,因为
实际包含的信息不仅仅是日期,它还包含时间。现在,您的数据已被正确过滤,可以传递到最终过滤,
searchFilter
,我将留给您根据用户输入确定最佳过滤方式(按时间、航班号、终端等)


如果您检查代码笔,现在应该能够按班次和日期进行过滤

问题是您没有从API中得到任何回报(
404
)。见下图

这是因为组件加载时的
${day}
值是
未定义的
。因此,您的完整请求URL是
https://api.iev.aero/api/flights/undefined
它不返回任何内容

现在,您正在调度
加载数据\u启动
,因此当您到达减速器并点击
案例时“加载数据\u开始
行,
操作。日期仍
未定义
。因此对于
action.data
您将得到一个空数组。这将使我们进入
LOAD\u DATA\u END
,您可以将
shift
的状态值设置为等于
Object.keys(action.DATA)[0]
。由于
action.data
是空的,
对象。键(action.data)[0]
未定义的
,您的应用程序无法使用
未定义的
进行过滤。您需要为
this.state.day
设置一个默认值,并在初始提取时使用该值

更新1

您需要在初始获取中传递一个默认值。在您的
组件didmount
中尝试以下操作:

const days = ["23-08-2019", "24-08-2019", "25-08-2019"];

class Root extends React.Component {
    componentDidMount() {
      this.props.onFetchData(days[this.props.propReducer.day]);
    }
    ...
 }
无需导出
days
数组,只需将其声明为组件上方的变量即可

更新2

我已经更新了。这里发生了一些变化

首先,您的redux操作存储在
this.props
中,但您的redux状态存储在
this.props.propReducer
中,因此在渲染中我更改了变量,使其指向正确的位置

接下来,您将在加载数据结束后立即调度
SET\u SHIFT
,并将
DATA
作为有效负载传递。这是将
state.shift
设置为从初始提取返回的数据。因此,当您尝试按
state.shift
过滤数据时,除了您第一次
 var newData = action.payload.data[state.shift].filter(x => {
    return (
      x.actual &&
      x.actual.includes(
        action.payload.day
          .split("-")
          .reverse()
          .join("-")
      )
    );
  });
  return Object.assign({}, state, {
    data: action.payload.data,
    shift: Object.keys(action.payload.data)[0],
    filteredData: searchFilter(state.search, newData)
  });