在react-native中迭代JSON数组

时间:2017-10-12 05:33:50

标签: javascript arrays json reactjs react-native

我遇到了在本地工作的问题。我已经解析了一个JSON对象,需要迭代嵌套在其中的数组。我想获取列表中的所有profiles个对象。

我尝试使用下面的代码,但它没有获取配置文件对象。如何在列表中打印所有配置文件对象?

代码:

import React, { Component } from 'react';
import { AppRegistry, StyleSheet, Modal, Image, Platform } from 'react-native';
import { Spinner, Text, View, Content, Container,Item,Header,Body, Title, Button, Icon, InputGroup, Input, ListItem, List, Radio, CheckBox, Thumbnail, Card, CardItem, H3 } from 'native-base';

 class Profile extends Component {
    constructor(props) {
        super(props);
        this.state = {
            radio1 : true,
            check1: false,
            modalVisible: false,
            search: 'nativebase',
            selectedItem: undefined,
            results: {
                items: []
            }
        }
    }

    setModalVisible(visible, x) {
        this.setState({
            modalVisible: visible,
            selectedItem: x
        });
    }

    toggleCheck() {
        this.setState({
            check1 : !this.state.check1
        })
    }
    componentDidMount() {

        var that = this;
        this.search();

    }

    search() {
        // Set loading to true when the search starts to display a Spinner
        this.setState({
            loading: true
        });

        var that = this;
        return fetch('https://mysite.in/api/profilematch/25/')
            .then((response) => response.json())
            .then((responseJson) => {
                // Store the results in the state variable results and set loading to 
                // false to remove the spinner and display the list of repositories
                that.setState({
                    results: responseJson,
                    loading: false
                });

                return responseJson;
            })
            .catch((error) => {

                that.setState({
                    loading: false
                });

                console.error(error);
        });
    }

    render() {

        var that = this;
        return (
            <Container>
                <Content>
                <List>
                    {this.state.loading? <Spinner /> : <List dataArray={this.state.results} renderRow={(results) =>
                                <ListItem button onPress={()=>this.setModalVisible(true, item)} >
                                    <Thumbnail square size={80} source={{uri: results.avatar_url}} />
                                    <Text>Name: <Text style={{fontWeight: '600', color: '#46ee4b'}}>{results}</Text></Text>
                                     <Body>
                                    <Text>{results.sur_name}</Text>

                                    </Body>
                                </ListItem>
                            } />}
                </List>
            </Content>
            </Container>
         );
     }
 }
const styles = StyleSheet.create({
    header : {
        marginLeft: -5,
        marginTop: 5,
        marginBottom: (Platform.OS==='ios') ? -7 : 0,
        lineHeight: 24,
        color: '#5357b6'
    },
    modalImage: {
        resizeMode: 'contain',
        height: 200
    },
    bold: {
        fontWeight: '600'
    },
    negativeMargin: {
        marginBottom: -10
    }
});

module.exports = Profile;

JSON:

[
    {
        "id": 4,
        "profiles": [
            {
                "id": 18,
                "first_name": "sweta",
                 "is_active": true

            },
            {
                "id": 20,
                "first_name": "Hiteshi",
                 "is_active": true
            },
            {
                "id": 3,
                "first_name": "Sneha",
                "is_active": true
            }
        ],
        "user": 25
    }
]

我想要做的就是在列表中打印profiles个对象。

1 个答案:

答案 0 :(得分:1)

获取时添加另一个变量

that.setState({
   //assuming profiles exist
   profiles: responseJson[0].profiles,
});

创建列表视图

<ListView dataSource={this.state.profiles} renderRow={this.renderRow.bind(this)} />

显示数据

renderRow(rowData) {
   return (<Text>{rowData.first_name}</Text>);
}

我希望这会对你有所帮助。没有经过测试,但应该像这样工作。