javascript - 如何在内部实现带有 Promise 的渲染逻辑?
问题描述
我开始阅读 React.js 并面临发生。我向服务器发出获取请求,答案是获取 json 文件。我正在解析这个 json,因为这个承诺是返回的,应该开始'then',但是我的 renderRoomList() 没有返回,我得到错误。如何正确实现逻辑?Func 'renderRoomList' 应该返回渲染,只有在从服务器获取数据之后
load() {
var result = []
var promise = new Promise((resolve, reject) => {
fetch('url', {method: 'GET'})
.then(response => {
if(response.ok) {
return response.json();
} else {
throw new Error('error');
}
})
.then(//parsed json and add to result array)
};
promise.then(() => {
return(<div>{result}</div>)
}
return //what return?
}
解决方案
除了从 promise 中返回 JSX,您可以使用在组件状态setState
中设置,并在 render 方法中使用。result
this.state.result
例子
function getData() {
return new Promise(resolve => {
setTimeout(() => {
resolve("foobar");
}, 1000);
});
}
class App extends React.Component {
state = { result: "" };
componentDidMount() {
this.load();
}
load = () => {
getData().then(result => {
this.setState({ result });
});
};
render() {
return <div>{this.state.result}</div>;
}
}
ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>
推荐阅读
- build - vlc 添加到 yocto 构建
- apache-spark - 如何使用变换高阶函数?
- javascript - Highcharts:如何在 x 轴上绘制日期字段?
- android - 何时使用 RTL 和 LTR?
- php - 循环在 laravel 工作中没有按预期工作
- scheme - 非空方案列表是否包含至少一个原子?
- spring-integration - GatewayMethodInboundMessageMapper 中带有未注释参数的误导性异常消息
- python - 当使用 for 循环创建一个 DF 时,Pandas concat 无法按预期工作
- bash - awk 和一个全局变量
- java - 从片段返回活动时调用函数