我正在尝试从返回promise的服务中呈现一些内容,但我无法弄清楚应该如何在“return”块中返回数据。
返回一些静态数据没问题,如本例所示。但是如何以相同的方式从注释代码中返回数据?
图像显示控制台,您可以在其中看到承诺。
我知道答案很简单,但我无法绕过它。
render() {
const data2 = [
{title:'item one', id:'000'},
{title:'item two', id:'001'}
];
console.log(data2);
const data = firebaseCon.content.get('text', { fields: ['id', 'title'] });
console.log(data);
var itemList = data2.map(function(item) {
return <li className="item" key={item.id}>{item.title}</li>;
});
return (
<ul>
{itemList}
</ul>
)
}
答案 0 :(得分:5)
首先,我会说你做错了。
您永远不应该在渲染功能中发出服务器请求。
您应该在componentWillMount()
或componentDidMount()
。
如果您了解async/await
概念,那么它会对您有所帮助。
您可以查看此链接..
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
你可以试试这个......
import React, { Component } from 'react';
export default class ListData extends Component {
constructor(props) {
super(props);
this.state = {
data: []
};
}
async componentDidMount() {
const data = await firebaseCon.content.get('text', { fields: ['id', 'title'] });
this.setState({ data });
}
render() {
const { data } = this.state;
const itemList = data.map(function(item) {
return <li className="item" key={item.id}>{item.title}</li>;
});
return (
<div>
{data.length > 0 &&
<ul>
{ itemList }
</ul>
}
</div>
);
}
}
希望它会有所帮助
答案 1 :(得分:0)
你见过这个吗?
https://github.com/axios/axios
基于Promise的HTTP客户端,用于浏览器和node.js.
您可以在本教程中看到它与React一起使用:
https://codeburst.io/building-appointment-scheduler-app-in-react-and-nodejs-f163c4eaab6b
希望它有所帮助。
答案 2 :(得分:0)
此代码将处理api返回的对象,并将提取移至componentDidMount
。
constructor(props) {
super(props);
this.state = {
data: [],
}
}
componentDidMount() {
firebaseCon.content.get('text', { fields: ['id', 'title'] })
.then((response) => {
let data = [];
for (item in response) {
data.push(response[item]);
}
this.setState({ data });
});
}
render() {
let itemList = this.state.data.map(function(item) {
return <li className="item" key={item.id}>{item.title}</li>;
});
return (
<ul>
{itemList}
</ul>
)
}
仔细研究Promises的方法then
和catch
应该更清楚:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then