3

I've come across a problem working in react native. I've parsed a JSON object and need to iterate over an array nested inside it.I want to get all profiles objects in a list.

i tried with the below code but its not fetching profiles object .how to print all profiles objects in list?

code:

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
    }
]

All i want to do is to print profiles objects in a list.

2
  • 2
    responseJson[0].profiles is the array you want to iterate - so perhaps results: responseJson[0].profiles ? Commented Oct 12, 2017 at 5:39
  • @JaromandaX Thanks a lot. its working ,you saved my day. Commented Oct 12, 2017 at 6:42

1 Answer 1

1

While fetching add another variable

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

Creating a listview

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

Displaying data

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

I hope this helps you. Not tested but should work like this.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.