在React Native中处理空错误消息的最佳方法是什么?

时间:2019-01-28 11:40:17

标签: react-native

我必须显示一条错误消息“无可用记录”。 这是我的情况:-

API Call {
if (data){
loading == false
 }
}

在我的组件中

    Render(){
      {
         data.length > 0 && this.state.loading == false ?
               <Flat List/>
         : null
      }
     {
         data.length==0 ?
               <Text>No Record found</Text>
: null
      }
    }

我的问题是,如果没有找到数据但没有刷新,则会显示我的消息。 我必须实现这样的情况-

当我打开或浏览页面时,它的第一个显示为空白,然后加载器启动,如果没有找到数据,则在API调用之后,它们会显示一条消息。

2 个答案:

答案 0 :(得分:0)

这是您所描述内容的有效示例。加载组件时,数据为空,直到您的API调用在componentDidMount中运行。我模拟了2秒的超时API调用。您需要使用自己的fetch方法在apiCall中关闭setTimeout函数,并在该函数的回调中设置状态

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

class Test extends Component {
  state = {
    loading: false,
    data: [],
  };

  componentDidMount() {
    this.apiCall();
  }

  apiCall = () => {
    this.setState({ loading: true });

    setTimeout(() => {
      this.setState({
        loading: false,
        data: ['1', '2', '3'],
      });
    }, 3000);
  };

  render() {
    if (this.state.loading) return <Text>Loading...</Text>;
    if (this.state.data.length === 0) return <Text>No records found</Text>;

    return (
      <View>
        <Text>Records found</Text>
      </View>
    );
  }
}

export default Test;

答案 1 :(得分:0)

您可以绑定动作和减速器数据 这是您想要的示例

import React, { Component } from 'react';
import {
    Text,
    View,
    Dimensions,
    FlatList,
    ScrollView,
} from 'react-native';
import { connect } from 'react-redux';
import {showLoading, getProducts} from '../actions/productAction';
import * as Progress from 'react-native-progress';

class Data extends Component {



    this.state = {
        product: [],
        loading: false
    };

    componentWillMount() {
        this.setState({loading: true});
        API CALL();
    }


    render() {
        return (
            <View>

                {this.state.isLoading ?
                    <View>
                        <Progress.CircleSnail thickness={5} size={55} color={['#000000', '#000000', '#FFFFFF',]} />
                    </View>
                    :
                    null
                }

                {this.state.product.length === 0 && <View>
                    <Text>{"NO PRODUCT"}</Text>
                </View>}

                <FlatList
                    data={this.state.product}
                />

            </View>
        );
    }
}



export default Data;