【发布时间】:2017-02-20 17:25:51
【问题描述】:
我正在尝试从使用 fetch 调用的 JSON 对象中测试渲染列表组件,但是我怀疑渲染是在返回 JSON 之前调用的,因为我收到未定义的错误。请注意调试警报()获取值,但渲染已经在未定义时出错。我该如何处理?获取数据后有没有办法调用渲染函数?或者我怎么能用“?”来渲染数据?然后在数据到达时更新?请注意我的 if (!object) 不工作;当作为内联包装器调用时 - 为什么不工作 - 或者更重要的是我将如何实现这一点?对不起初学者的问题 - 我怀疑我打算使用数据框架来带来数据以做出反应以显示,但我想开始使用更少的框架学习并获得基础知识。非常感谢! - 代码是:
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
class ItemLister extends React.Component {
constructor(props ) {
super(props);
this.state = { items: [] };
}
componentDidMount() {
let url = "http://localhost:8888";
let iterator = fetch(url, {method: 'GET'});
iterator
.then(response => {
//console.log('sss', response)
return response.json();
})
.then(post => {
//console.log(post)
this.state.items = post;
alert(this.state.items.users[3].firstname);
});
}
output(object){
if (!object){
return '?';
}else{
return object;
}
}
render() {
return(
<div>
<div>Items:</div>
<div>{this.output(this.state.items.users[3].firstname)}</div>
</div>
);
}
}
export default ItemLister;
【问题讨论】:
-
是的,这是 React 或其他此类框架的基本功能。当没有数据并且状态发生变化时,您渲染一个占位符/加载/任何内容,组件将再次渲染并渲染实际数据。它不起作用的原因是因为您尝试访问
this.state.items.users...并且它不存在所以它甚至无法访问该函数。
标签: reactjs asynchronous urlfetch