【发布时间】:2018-08-13 01:46:26
【问题描述】:
我尝试使用 fetch 从后端调用 react,没有库(例如 Axios)。所以我创建了这个函数:
export function api(url, method, body, isHeaderContentType,isRequestHeaderAuthentication,header, succesHandler, errorHandler) {
const prefix = 'link';
console.log("url:",prefix+url);
const contentType = isHeaderContentType ? {
'Content-Type': 'application/json',
} : {};
const auth = isRequestHeaderAuthentication
? {
Authorization: `Bearer ${AuthUtils.getTokenUser}`,
}
: {};
fetch(prefix + url, {
method,
headers: {
...contentType,
...auth,
...header,
},
protocol:'http:',
body,
})
.then(response => {
response.json().then(json => {
if (response.ok) {
console.log("method", json);
if (succesHandler) {
succesHandler(json)
}
} else {
return Promise.reject(json)
}
})
})
.catch(err => {
console.log("error",`${url} ${err}`);
if (errorHandler) {
errorHandler(err);
}
})
} 并这样称呼它
api(
`link`,
"GET",
null,
true,
true,
null,
response => {
this.setState({profile:response.data})
},
err => {
console.log('error', err);
}
);
我在这个函数中调用了我的 api():
getProfileUser = () =>{
if (!isUserAuthenticated()){
history.push('/signin')
}else {
api(
`link`,
"GET",
null,
true,
true,
null,
response => {
this.setState({profile:response.data})
},
err => {
console.log('error', err);
}
);
}
};
这是我的完整组件:
export default class Profile extends Component {
constructor(props) {
super(props);
this.state = {
profile:[]
}
}
getProfileUser = () =>{
if (!isUserAuthenticated()){
someCode
}else {
api(
`link`,
"GET",
null,
true,
true,
null,
response => {
this.setState({profile:response.data})
},
err => {
console.log('error', err);
}
);
}
};
componentDidMount() {
this.getProfileUser();
}
render(){
return(
<div>
hello
</div>
)
}
}
但是当我尝试运行它时,我收到了这样的错误
TypeError: 无法在 'Window' 上执行 'fetch': 无效值
有人知道我的代码有什么问题吗?该功能在我使用“POST”方法时有效,但在我使用“GET”方法时无效
【问题讨论】:
-
你什么时候打电话给
api()?您是在组件生命周期方法中调用它吗?如果有,是哪一个? -
@Stretch0 是的,我试图在 componentwillmount 上调用它
-
如果你尝试在
componentDidMount()中调用它是否有效? -
@Stretch0 不,我仍然遇到同样的错误
-
这是一个奇怪的问题,但你可以尝试添加这个吗? const fetch = window.fetch.bind(window);
标签: javascript reactjs fetch