如何在componentDidMount中使用if / else和responseJson?

时间:2019-04-24 18:58:07

标签: react-native

我有一个componentDidMount,我想按listView显示一些数据。现在,我想检查是否存在任何数据,因此我通过if/else进行了检查,但它不起作用,并且始终if为真。

我在log.console中放了一个componentDidMount以显示responseJson,现在显示了none

但是当我有其他类似产品的数据时,if就是true 再次

  componentDidMount(){

    const { navigation } = this.props;
    const cat = navigation.getParam('cat');
    fetch('products.php',{
      method:'POST',
      headers:{
        'Accept':'application/json',
        'Content-type':'application/json'
      },
      body:JSON.stringify({
        cat:cat
      })
    }).then((response)=>response.json()).
    then((responseJson)=>{
      console.log(responseJson);
      if (responseJson=='none') {
        this.setState({
          isLoading:false,
          empty:true,
        });
      }else{
        let ds = new ListView.DataSource({rowHasChanged:(r1,r2)=>r1!=r2});
        this.setState({
          isLoading:false,
          dataSource:ds.cloneWithRows(responseJson)
        });
      }
    }).done();

  }

1 个答案:

答案 0 :(得分:1)

查看代码后,您似乎要检查responseJson是否为空。如果为空,则setState为空,否则setState带有响应数据。

首先,永远不要像完成操作那样对整个对象进行检查

if (responseJson=='none') {

相反,您可以检查数据附带的错误。

if (responseJson.error === true) {
       this.setState({
          isLoading:false,
          empty:true,
        });
      }else{
        let ds = new ListView.DataSource({rowHasChanged:(r1,r2)=>r1!=r2});
        this.setState({
          isLoading:false,
          dataSource:ds.cloneWithRows(responseJson)
        });
}

或者您可以对数据进行检查

if (responseJson.data === null) {
       this.setState({
          isLoading:false,
          empty:true,
        });
      }else{
        let ds = new ListView.DataSource({rowHasChanged:(r1,r2)=>r1!=r2});
        this.setState({
          isLoading:false,
          dataSource:ds.cloneWithRows(responseJson)
        });
}