【发布时间】:2016-08-08 18:31:47
【问题描述】:
我对 React 很陌生,我正在尝试使用 fetch api 从服务器调用数据。
如果我想创建一个帮助类来获取这样的数据
import { Promise } from 'es6-promise';
import fetch from 'isomorphic-fetch';
let responseData = response => {
return response;
};
let getData = (dataURL, headers) => {
let result = {
data: [],
message: ''
};
if (dataURL === null || dataURL === undefined || dataURL === '') {
result.message = 'URL is not correct';
responseData(result);
}
fetch(dataURL, headers)
.then(response =>{
if (response.ok) {
response.json().then(data => {
result.data = data;
result.message = response.statusText;
responseData(result);
});
}else{
result.message = 'Network response was not ok.';
responseData(result);
}
})
.catch(err => console.log(err));
};
exports.responseData = responseData;
exports.getData = getData;
当数据可用时,我会要求 React 渲染视图,在等待期间,它会显示一个加载图标。
我将调用放在componentDidMout 中,但在执行时,结果始终是undefined。
componentDidMount() {
var self = this;
let result = util.getData('http://localhost:3001/menus');
const { dispatch } = this.props;
// dispatch(menuActions.fetchMenusIfNeeded());
if (result !== null && result !== undefined) {
if (this.isMounted()) {
this.setState({
items: result.data.results
});
}
}
}
在 Angular 中,只要数据可用,它就会相应地更新,但我真的不明白如何在 React 中做到这一点。
编辑 1: 更新助手类:
import { Promise } from 'es6-promise';
import fetch from 'isomorphic-fetch';
let getData = (dataURL, headers) => {
return fetch(dataURL, headers);
};
exports.getData = getData;
它总是会返回一个Promise,所以我可以链接其他组件中的数据处理程序。我需要通过读取组件中的Response 对象来处理消息返回的唯一问题。
在 React 组件中:
componentWillMount() {
util.getData('http://localhost:3001/menus')
.then(response =>{
if (response.ok) {
response.json().then(data => {
console.log(data);
this.setState({
items: data.result
});
});
}
})
.catch(err => console.log(err));
}
但是每当它接收到数据时,render() 函数已经完成,我应该强制它再次更新吗?
【问题讨论】:
-
你不会从
getData函数返回任何东西,但即使你确实返回了result,这是异步的,所以你不会在componentDidMount中看到result。 -
我理解了这个问题,但是每当我返回
Promise时,我应该如何通知 React 更新render()函数。 -
一篇文章回答了关于如何、何时以及在哪里获取 React 数据的所有问题:How to fetch data in React。也许它有助于人们在偶然发现这个问题时了解它。
标签: javascript reactjs fetch