简体   繁体   English

解析 A 后渲染 JSX 元素 Promise

[英]Render JSX Elements After Resolving A Promise

I Want To Render A <Flatlist /> After I Make A Request And Resolve It Then Render The <Flatlist /> Here Is The <Flatlist /> that I Want To Render <FlatList data={DATA} renderItem={renderItem} keyExtractor={item => item.id} /> Please Help我想渲染一个<Flatlist />在我发出请求并解析它然后渲染<Flatlist />这是我想要渲染的<Flatlist /> <FlatList data={DATA} renderItem={renderItem} keyExtractor={item => item.id} />请帮忙

React rendering cannot be asynchronous. React 渲染不能异步。

If you need to depend on data acquired asynchronously then the render function should read the data from the state .如果您需要依赖异步获取的数据,那么渲染 function 应该从state读取数据。

You need to be prepared for when the data doesn't exist yet (eg if (state.data) { return <Flatlist data={state.data} /> } else { return <LoadingSpinner /> }`.您需要为数据尚不存在做好准备(例如if (state.data) { return <Flatlist data={state.data} /> } else { return <LoadingSpinner /> }`。

Trigger the asynchronous code inside componentDidMount or a useEffect function, and when the promise resolves: Set the state with the new data.触发componentDidMountuseEffect function 中的异步代码,当 promise 解析时:使用新数据设置 state。

Try this way试试这个方法

import React, { Component } from 'react';
import { View, Text } from 'react-native';
import { FlatList } from 'react-native-gesture-handler';

class App extends Component {
    constructor(props) {
        super(props);
        this.state = { data: [] };
    }

    componentDidMount() {
        fetch('http://api/..', {
            method: 'GET',
        }).then((response) => response.json())
            .then((responseJson) => { return this.setState({ data: responseJson }) })
            .catch((error) => { alert(error) }
            );
    }

    render() {
        const data = this.state.data;
        return (
            <View>
                {data.length != 0 ?
                    <FlatList
                        data={data}
                        keyExtractor={(x, i) => x + i}
                        renderItem={({ item }) => <Text>{item.name}-DATA</Text>}
                    />
                    : <View>
                        <Text>No data found</Text>
                     </View>
                }

            </View>
        );
    }
}

export default App;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM