Выборка списка объектов из API react native

#json #react-native #api

#json #react-native #API

Вопрос:

я пытаюсь напечатать времена из нижеприведенного api, но api является вложенным.

Данные Api следующие: { «code»: 200, «status»: «OK», «results»: { «datetime»: [ { «times»: { «Imsak»: «03:57», «Sunrise»: «05:31», «Fajr»: «04:07», «Dhuhr»: «12:10», «Asr»: «15:50», «Sunset»: «18:49», «Maghrib» : «19:00», «Иша»: «20:13», «Полночь»: «23:28″ }, » дата»: { «временная метка»: 1598140800, «григорианский»: «2020-08-23», «хиджры»: «1442-01-04″ } } ], » местоположение»: { «широта»: 33.729389190673828, «долгота»: 73.093147277832031, «высота»: 585.0, «город»: «Исламабад», «страна»: «Пакистан», «код страны»: «PK», «часовой пояс»: «Азия / Карачи», «local_offset»: 5.0 }, «настройки»: { «формат времени»: «ЧЧ: мм», «школа»: «Итна Ашари», «юриспруденция»: «Шафии», «хайлат»: «Нет», «fajr_angle»: 18.0, «isha_angle»: 18.0 } } }

Я хочу отобразить все времена молитв, используя ToucableOpacity в React-native

Класс выборки — это:

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

class tryo extends Component {
    constructor(props) {
        super(props);
        this.state = {
            timings: {}
        }
    }

    componentDidMount = () => {
        fetch("https://api.pray.zone/v2/times/today.json?city=islamabad", {
            "method": "GET",

        })
            .then((response) => response.json())
            .then((responseJson) => {
                console.log("Mount",responseJson);
                this.setState({
                    timings: responseJson.results
                })
                console.log("state check",this.state.timings)
            })
            .catch((error) => {
                console.error(error);
            });
    }


    render() {






   const data=this.state.timings
        console.log("lets check data",this.state.timings)
        return (
// <View>
//  <Text>dsd</Text>
// </View>

            <View style={styles.container}>

                {Object.entries(data).map((item,index)=>(
                    <TouchableOpacity key={index} style={styles.touch_sense} onPress={() => this.props.navigation.navigate('Home')}  >

                        <Text style={styles.item_Text} >

                            {item['times']}

                        </Text>

                    </TouchableOpacity>

                )   )
                }

             </View>

        );}
}
export default tryo

const styles=StyleSheet.create({

        item_Text:{
            fontWeight:'bold',
            fontSize: 20,


        },
        container:{

            // textAlign:'center',
            // alignItems:'center',
            // justifyContent:'center',
            // marginTop:15,
            padding:5,
            // backgroundColor:'green'

        }
        ,
        touch_sense:{
            textAlign: 'center',
            justifyContent:'center',
            alignItems:'center',
            marginTop:10,
            backgroundColor:'#1FE884',
            width:400,
            height:80


        }



    }

);
  

я хочу получить доступ к атрибутам времени из API

Ответ №1:

Я бы создал дополнительный метод визуализации, подобный этому:

 renderTimes(times) {
    return times.map( (time) => {
        <Text style={styles.item_Text}>
            {time}
        </Text>
    });
}
  

а затем обновите свой метод визуализации, чтобы быть:

 render() {
    return ( 
        <View style={styles.container}>
            { Object.entries(data).map((item,index)=>(
                <TouchableOpacity key={index} style={styles.touch_sense} onPress={() => this.props.navigation.navigate('Home')}  >
                    {renderTimes(item['times'])}
                </TouchableOpacity>
             )}
         </View>
    );
}
  

Если вы хотите, чтобы каждый момент времени был своим TouchableOpacity , просто преобразуйте эти строки кода в этот renderTimes метод.