Я пытаюсь составить список элементов, которые загружаются с помощью API мест Google. Я без проблем получаю стандартные значения и аккуратно читаю в функции «папка», такой как item.name, но я также хочу использовать фотографии. если в моем 'componentWillMount' console.log (this.state.drinks [0] .photos [0] .photo_reference); выходной я получаю правильное значение. Однако я не могу сделать это в функции папки. там я получаю eroor: 'TypeError: undefined не является объектом (оценка' items.photos [0] ')'
Мой вопрос заключается в том, знает ли кто-нибудь, как управлять дочерним объектом объекта в функции карты ? У меня должно быть свойство 'Photos', в объекте свойство 'photo_reference'.
мой код:
import React, {Component} from 'react';
import {Platform, StyleSheet, Text, View, Image, Button, ScrollView, ImageBackground, Dimensions} from 'react-native';
import { Avatar, ListItem,Tile } from 'react-native-elements';
import firebase from 'react-native-firebase';
import Icon from 'react-native-vector-icons/FontAwesome';
import Slideshow from 'react-native-image-slider-show';
const initialLayout = { width: Dimensions.get('window').width };
class horecaScreen extends Component {
constructor(props){
super(props);
this.state = {
position: 1,
interval: null,
dataSource: [
{
title: 'Restaurant Rijk Van Margraten',
caption: 'Bemelerweg 99, Cadier en Keer',
url: 'https://firebasestorage.googleapis.com/v0/b/adventure-time-21e7c.appspot.com/o/dummy-eijsden.jpg?alt=media&token=87534c11-1280-4f54-a273-9f23225f9ab7',
}, {
title: 'Golfbaan het Rijk van Margraten',
caption: 'Bemelerweg 99, Cadier en Keer',
url: 'https://firebasestorage.googleapis.com/v0/b/adventure-time-21e7c.appspot.com/o/golfbaan-eijsden-margraten.jpg?alt=media&token=1cf1d9bf-5b63-4b51-8f68-1dd3df870af4',
}, {
title: 'Restaurant Rijk Van Margraten',
caption: 'Bemelerweg 99, Cadier en Keer',
url: 'https://firebasestorage.googleapis.com/v0/b/adventure-time-21e7c.appspot.com/o/dummy-eijsden.jpg?alt=media&token=87534c11-1280-4f54-a273-9f23225f9ab7',
},
],
drinks: [],
}
}
getUserData = (user) => {
console.log(user);
let ref = firebase.database().ref('Users/' + user);
ref.on('value' , snapshot =>{
var state = snapshot.val();
this.setState({
index: 0,
routes:[
{key: 'first', title: 'First'},
{key: 'second', title: 'Second'}
]
})
})
}
photosPlaces = [];
drinksPlaces = [];
componentWillMount(){
let user = firebase.auth().currentUser;
console.log(user);
this.getUserData(user.uid);
let url = 'https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=50.97648620605469,5.780409336090088&radius=2000&type=bar&key=<API KEY>';
fetch(url)
.then((response) => response.json())
.then((JsonResponse) => {
// console.error(JsonResponse)
console.log(JsonResponse.results)
this.setState({
drinks: JsonResponse.results,
})
//console.log(this.state.drinks[0].photos[0].photo_reference);
})
.catch((error) => {
alert('error')
});
}
render() {
return (
<ScrollView style={styles.container}>
<Slideshow
dataSource={this.state.dataSource}
position={this.state.position}
onPositionChanged={position => this.setState({ position })}
titleStyle={{color: 'white', fontWeight: 'bold'}}
captionStyle={{color: 'white'}}
arrowSize={0}
onPress={({ index }) => this.props.navigation.navigate('HorecaDetail', {indexID: index})}
/>
<View style={styles.Tiles}>
<View style={styles.activity}>
<Text style={styles.activityText}>Iets drinken in de buurt?</Text>
<ScrollView horizontal={true}>
{
this.state.drinks.length > 0 && this.state.drinks.map((item, i) =>(
<View style={styles.listRow}>
<ImageBackground source={{uri:'https://maps.googleapis.com/maps/api/place/photo?maxwidth=400&photoreference=' + item.photos[0].photo_reference + '&key=<API KEY>'}} style={{width: 140, height: 200, justifyContent: 'flex-end',paddingBottom: 10, paddingLeft: 10, borderRadius: 250 }}>
<Text style={styles.insideText}>{item.name}</Text>
</ImageBackground>
</View>
))
}
</ScrollView>
</View>
</View>
<View style={styles.Tiles}>
<View style={styles.activity}>
<Text style={styles.activityText}>Iets eten in de buurt?</Text>
<ScrollView horizontal={true}>
<View style={styles.listRow}>
<View style={styles.LeftColumn}>
<ImageBackground source={require('../assets/images/all/dummy-location.png')} style={{width: 140, height: 200, justifyContent: 'flex-end',paddingBottom: 10, paddingLeft: 10, borderRadius: 250 }}>
<Text style={styles.insideText}>Bedrijf A</Text>
</ImageBackground>
</View>
<View style={styles.RightColumn}>
<ImageBackground source={require('../assets/images/all/dummy-location.png')} style={{width: 140, height: 200, justifyContent: 'flex-end',paddingBottom: 10, paddingLeft: 10 , marginLeft: 5,}}>
<Text style={styles.insideText}>Bedrijf B</Text>
</ImageBackground>
</View>
</View>
<View style={styles.listRow}>
<View style={styles.LeftColumn}>
<ImageBackground source={require('../assets/images/all/dummy-location.png')} style={{width: 140, height: 200, justifyContent: 'flex-end',paddingBottom: 10, paddingLeft: 10, borderRadius: 250 }}>
<Text style={styles.insideText}>Bedrijf A</Text>
</ImageBackground>
</View>
<View style={styles.RightColumn}>
<ImageBackground source={require('../assets/images/all/dummy-location.png')} style={{width: 140, height: 200, justifyContent: 'flex-end',paddingBottom: 10, paddingLeft: 10 , marginLeft: 5,}}>
<Text style={styles.insideText}>Bedrijf B</Text>
</ImageBackground>
</View>
</View>
</ScrollView>
</View>
</View>
<View style={styles.bottomSpace}>
</View>
</ScrollView>
);
}
}
const styles = StyleSheet.create({
profileName:{
fontWeight: 'bold',
fontSize: 22,
marginTop: 20,
},
list:{
marginTop: 40,
width: '100%'
},
scene: {
flex: 1,
},
listRow:{
flex: 1,
flexDirection: 'row',
flexWrap: 'wrap',
alignItems: 'flex-start',
paddingTop: 10,
marginTop: -20,
marginRight: 10
},
LeftColumn:{
width: '50%',
borderRadius: 250
},
RightColumn:{
width: '50%',
},
Tiles:{
padding: 10,
marginTop: 20
},
insideText:{
color: 'white',
bottom: 0,
alignContent: 'flex-end',
fontWeight: 'bold'
},
bottomSpace:{
padding: 10,
marginTop: 30
},
Slideshow:{
color: 'white'
},
activityText:{
fontWeight: 'bold',
fontSize: 18,
marginBottom: 10,
},
iconOverview:{
fontSize: 15,
paddingRight: 120
}
})
export default horecaScreen;
вывод из выборки: