【发布时间】:2016-10-20 04:29:43
【问题描述】:
我有以下组件,我正在尝试从 API 检索电影列表。但是,变量movies 不包含预期的结果。
我做错了什么?
代码如下:
import React, { Component, } from 'react'
import { View } from 'react-native'
import {
List,
ListItem,
Text,
} from 'native-base';
class Test extends Component {
render() {
var movies = this.getMoviesFromApi();
for(var movie in movies)
{
console.warn(movie);
}
return (
<List dataArray={movies}
renderRow={(movie) =>
<ListItem>
<Text>{movie}</Text>
</ListItem>}
/>
);
}
async getMoviesFromApi() {
try {
let response = await fetch('https://facebook.github.io/react-native/movies.json');
let responseJson = await response.json();
return responseJson.movies;
} catch(error) {
console.error(error);
}
}
}
export default Test;
【问题讨论】:
-
getMoviesFromApi是一个异步函数,这意味着它返回一个承诺。你必须正确处理承诺。 -
要扩展 @FelixKling 响应,使用
var movies = await this.getMoviesFromApi()会起作用,但是render不是异步函数,也不是从服务器获取内容的好地方,因为渲染被称为万亿在 React 应用程序生命周期中的时间。考虑将该逻辑移至componentDidMount,并在响应返回后设置一些状态。 -
var movies = this.getMoviesFromApi().done();