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)
});