Api 反应+;Axios:未捕获类型错误:无法读取属性';类型';未定义-->;我的承诺不是';累加
我正在使用以下命令:Api 反应+;Axios:未捕获类型错误:无法读取属性';类型';未定义-->;我的承诺不是';累加,api,reactjs,promise,axios,Api,Reactjs,Promise,Axios,我正在使用以下命令: “axios”:“^0.15.3” “反应”:“^15.4.2” “react redux”:“^5.0.3” “redux”:“^3.6.0” “redux不可变”:“^3.1.0” 我想从波士顿市的数据门户检索数据。我的目标是,当一个人进入“属性”屏幕时,该组件的ComponentWillMount()将调用同步API调用,以在呈现componeet之前检索数据。请注意,我让所有这些与redux saga同步工作,但正如我上面提到的,用户操作会在数据显示在组件中之前
- “axios”:“^0.15.3”
- “反应”:“^15.4.2”
- “react redux”:“^5.0.3”
- “redux”:“^3.6.0”
- “redux不可变”:“^3.1.0”
https://data.cityofboston.gov/resource/ti2c-bzzp.json?$where=PID=\“
+NewCitySpoid+\”
)
从动作到减速机,一切都正常工作……所以作为新手,我觉得我使用axios是错误的。我甚至在我的操作中尝试了以下代码,并得到了相同的错误:
提前谢谢 您的操作创建者没有返回任何内容,因此将
未定义的
发送到您的商店。当您尝试读取减速机中未定义
的属性type
时,会引发错误
如果您查看动作创建者:
export function requestCityBosAPI(citybosPID) {
let newcitybosPID='1000001021';
// console.log('requestCityBosAPI citybosPID=[' + citybosPID + "]");
const request = > axios.get(`https://data.cityofboston.gov/resource/ti2c-bzzp.json?$where=PID=\"` + newcitybosPID + `\"`)
.then(response => {
console.log(response);
if (response.status === 200) {
return {
type: actionTypes.OK_CITYBOSAPI,
property2017: response.data,
createDT: new Date().toUTCString()
}
}
})
}
然后,唯一的返回语句是传递给.Then()
的匿名函数中的
Axios作为一个库只能进行同步调用——可以进行同步AJAX调用,但您必须问问自己这是否真的是您想要的?在请求解决之前,您的应用程序将完全没有响应,这通常是一种糟糕的用户体验
我将使用一个异步调用,如果这意味着有一段短时间您的组件没有数据,那么您可以只呈现一个加载屏幕。您可以使用您喜欢的任何redux副作用库(redux saga、redux thunk等)感谢您的回复。我会回到以前的代码,我理解用户体验是关键。。。
//External Dependencies
import axios from 'axios';
//Internal Dependencies
import * as actionTypes from './action_types';
export function requestCityBosAPI(citybosPID) {
let newcitybosPID='1000001021';
// console.log('requestCityBosAPI citybosPID=[' + citybosPID + "]");
const request = > axios.get(`https://data.cityofboston.gov/resource/ti2c-bzzp.json?$where=PID=\"` + newcitybosPID + `\"`)
.then(response => {
console.log(response);
if (response.status === 200) {
return {
type: actionTypes.OK_CITYBOSAPI,
property2017: response.data,
createDT: new Date().toUTCString()
}
}
})
//External Dependencies
import Immutable from 'immutable';
//Internal Dependencies
import * as actionTypes from '../actions/action_types';
const initialState = Immutable.Map({
property2017: null,
createDT: null,
error: null,
errorDT: null
});
console.log(initialState);
export default (state = initialState, action) => {
console.log(action);
console.log("action.type=[" +action.type +"]");
if (action.type === actionTypes.OK_CITYBOSAPI) {
return state.merge({ //returning new states
property2017: action.property2017,
createDT: action.createDT
})
}
else if (action.type === actionTypes.FAILED_CITYBOSAPI) {
console.log('FAILED_CITYBOSAPI ' + new Date().toUTCString());
return state.merge({ //returning new state
error: action.error,
errorDT: action.errorDT
})
}
return state; //returns initial state
}
export function requestCityBosAPI(citybosPID) {
console.log('requestCityBosAPI citybosPID=[' + citybosPID + "]");
axios.get(`https://data.cityofboston.gov/resource/ti2c-bzzp.json?$where=PID=\"` + citybosPID + `\"`)
.then(function (response) {
console.log(response);
if (response.status === 200) {
return {
type: actionTypes.OK_CITYBOSAPI,
property2017: response.data,
createDT: new Date().toUTCString()
}
}
else {
return {
type: actionTypes.FAILED_CITYBOSAPI,
error: response.statusText,
errorDT: new Date().toUTCString()
}
}
})
.catch(function (error) {
console.log(error);
});
}
export function requestCityBosAPI(citybosPID) {
let newcitybosPID='1000001021';
// console.log('requestCityBosAPI citybosPID=[' + citybosPID + "]");
const request = > axios.get(`https://data.cityofboston.gov/resource/ti2c-bzzp.json?$where=PID=\"` + newcitybosPID + `\"`)
.then(response => {
console.log(response);
if (response.status === 200) {
return {
type: actionTypes.OK_CITYBOSAPI,
property2017: response.data,
createDT: new Date().toUTCString()
}
}
})
}