【问题标题】:Render JSX Elements After Resolving A Promise解决 Promise 后渲染 JSX 元素
【发布时间】:2020-11-11 12:46:39
【问题描述】:

我想在我提出请求并解决它之后渲染<Flatlist /> 然后渲染<Flatlist /> 这是我想要渲染的<Flatlist /> <FlatList data={DATA} renderItem={renderItem} keyExtractor={item => item.id} /> 请帮忙

【问题讨论】:

    标签: javascript reactjs react-native promise react-native-flatlist


    【解决方案1】:

    React 渲染不能是异步的。

    如果你需要依赖异步获取的数据,那么渲染函数应该从 state 中读取数据。

    您需要为数据尚不存在做好准备(例如if (state.data) { return <Flatlist data={state.data} /> } else { return <LoadingSpinner /> }`。

    触发componentDidMountuseEffect 函数中的异步代码,当promise 解决时:使用新数据设置状态。

    【讨论】:

    • 这个问题的好解决方案谢谢?
    【解决方案2】:

    试试这个方法

    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;
    

    【讨论】:

    猜你喜欢
    • 2021-02-06
    • 2018-12-29
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 2020-12-07
    • 2021-12-07
    相关资源
    最近更新 更多