ReactJS:如何在获取数据后渲染组件
ReactJS: How to rerender component after fetching data
所以我有一个组件,它显示从外部API获取的一些数据并保存到localStorage。我放置了一个fetchData()函数来完成这项工作,并从componentWillMount()中调用该函数。它看起来像这样:
componentWillMount() {
this.fetchData();
}
...
fetchData() {
if(localStorage.myData === undefined) {
fetch(apiUrl,{
method: 'GET',
headers: ...
})
.then(function(data) {
localStorage.setItem('myData', data);
}).catch(function(error) {
// error handling
})
} else { return true; }
}
这里的想法是检查每次渲染,如果数据设置在localStorage,否则获取它,保存数据,然后渲染。但是,在数据存储在localStorage中之后,我无法使其呈现。我已经尝试使用this.setState({data: data})
代替fetchData函数,但this
是未定义的。
我在这里做错了什么?
类中的this
与then()函数中的this
具有不同的上下文。对于您的特殊情况,您可以执行以下操作
fetch(apiUrl,{
method: 'GET',
headers: ...
})
.then(function(data) {
// This now refers to your component
this.setState({data: data});
}.bind(this))
.catch(function(error) {
// error handling
})
或者像Utro建议的那样,您可以使用不会创建自己的上下文的箭头函数,从而允许您适当地使用this
。
fetch(apiUrl,{
method: 'GET',
headers: ...
})
.then(data => {
// This now refers to your component
this.setState({data: data});
}).catch(function(error) {
// error handling
})
.then中的这个对象将指向Promise调用的对象,而不是Component的对象。
vat that = this;
将这个变量声明为那个变量然后你可以使用
that.setState({})
相关文章:
- React Native通过Navigator将用户输入数据传递到选项卡栏IOS中的组件
- React-将jSON数据传递给子组件的子组件
- 如何在ReactJs中渲染子组件时重新加载子组件的数据
- 在reactjs组件中预加载数据
- 具有大型数据集的组件仅在 IE11/Edge 上运行缓慢
- 使用数据数组创建多个类似组件
- ReactJS - 输入组件数据传递
- 反应:从父组件获取子组件数据
- Mithril - 在子组件修改父组件数据后重新排序子组件数组
- 反应多页,组件数据传递
- 如何在组件外部访问v-if中的子组件数据
- 聚合物网络组件数据绑定一个js对象/数组
- Vue,js Vue -router 2组件数据没有更新
- 访问自定义组件数据/方法
- 从web-api在每个页面上生成组件数据
- 从Vue组件数据计算函数
- React组件,在父组件中验证子组件数据
- 如何在Vue.js中现有的基础上创建新的组件数据
- React.js:在添加时重新渲染组件数据
- JQuery在加载react js组件数据时触发两次滚动