【问题标题】:How Can I get Nested JSON to my DataSource ... React Native如何将嵌套 JSON 获取到我的数据源... React Native
【发布时间】:2017-06-12 04:40:01
【问题描述】:

帮帮我。如何将嵌套 JSON 获取到我的数据源... React Native 为什么这么难,或者我是新手,我做不到。

   {
    success: true,
    result: 
    {
        types: [],
        information: {
                        Campaigns: {
                        isEntity: true,
                        label: "Campaigns",
                        singular: "Campaign"
                        },
                        
                        Vendors: {
                        isEntity: true,
                        label: "Vendors",
                        singular: "Vendor"
                        },
                        
                        ProductTaxes: {
                        isEntity: false,
                        label: "ProductTaxes",
                        singular: "ProductTaxes"
                    }
                }
    }
}

我可以在 Java(原生 Android)中完美地做到这一点 with Iterator while hasNext

但在 React Native 中我不能这样做 :(

我需要在 Listview 中显示标签 条件是 isEntity = "true" isEntity = "false" 是否不在 Listview 中显示

import React, { Component } from 'react';
import {
  Text,
  View,
  ScrollView,
  ActivityIndicator,
  ListView
} from 'react-native';
import { List, ListItem } from 'react-native-elements';
import { users } from '../config/data';

class Feed extends Component {

  constructor(props){
    super(props)
    this.state = {
        mSessionName:null,
        isLoading: true,
    };

  }


  onLearnMore = (user) => {
    this.props.navigation.navigate('Details', { ...user });
  };

  componentWillMount() {
    const {state} = this.props.navigation;
    console.log(state.params.sessionName);
    console.log(state.params.u_url);
    console.log(state.params.u_url+"/webservice.php?operation=listtypes&sessionName="+state.params.sessionName);
    return fetch(state.params.u_url+"/webservice.php?operation=listtypes&sessionName="+state.params.sessionName)
    .then((response) => response.json())
    .then((responseJson) => {
      let ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
      this.setState({
        isLoading: false,
        dataSource: ds.cloneWithRows(responseJson.result),
      }, function() {
        // do something with new state
      });
    })
    .catch((error) => {
      console.error(error);
    });

  }
  render() {

    if (this.state.isLoading) {
         return (
           <View style={{flex: 1, paddingTop: 20}}>
             <ActivityIndicator />
           </View>
         );
       }

       return (
         <View style={{flex: 1, paddingTop: 20}}>
           <ListView
             dataSource={this.state.dataSource}
             renderRow={(rowData) => <Text>{rowData.information.Campaigns}, {rowData.information.Campaigns}</Text>}
           />
         </View>
       );
  }
}

export default Feed;

输出:>> My output img

【问题讨论】:

    标签: android json reactjs react-native


    【解决方案1】:

    您可以为 renderRow 添加条件:

    renderRow={(rowData) => <Text>{rowData.information.Campaigns}, {rowData.information.Campaigns}</Text>} // not sure why repeating 
    

    但根据您的评论应该是:

    renderRow={(rowData) => <Text>{rowData.information.Campaigns.isEntity ? rowData.information.Campaigns.label : </view> }</Text>}
    

    如果需要显示更多数据,那么我建议您制作函数来呈现行并添加您的视图结构以用于需要显示的数据。

    【讨论】:

    • 显示错误 T_T TypeError: Cannot read property 'Campaigns' of undefined
    • console.log(rowData) 有什么好处
    • 我的 rowData reurn (found object with keys{isEntity , label, single}) 如果指向 isEntity/label/singular 的指针是Cannot read property 'xxx' of undefined 我认为这个方法是静态的不是动态的"rowData.information.Campaigns.isEntity"
    • 好的。如果您可以在控制台中看到对象,那么您可以右键单击所需的变量并获取路径,将其与 rowData(复制路径 - 就像 .information.Campaigns 一样)使用它
    • from 'dataSource: ds.cloneWithRows(responseJson.result)' 我以前用过{rowData.information.Campaigns.singular} 再次返回错误无法读取未定义的属性“Campaigns”我不知道发生了什么
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-22
    • 2023-01-14
    • 2021-10-19
    • 1970-01-01
    • 2015-07-15
    • 2020-07-20
    相关资源
    最近更新 更多