在以本机方式运行的应用程序中遇到此问题。基本上,我应该创建一个页面,以打印当前登录到数据库(firebase)的用户的数据。我设法创建了一种排行榜,可以在所有页面上用数据打印所有用户,但是我无法弄清楚哪里出了问题。有人可以帮我吗?
https://snack.expo.io/@khal_d/proj-p-3
import React, { Component } from 'react';
import { View, TouchableOpacity, StyleSheet, Button, Text, ScrollView, ListItem } from 'react-native';
import { Input, Card} from 'react-native-elements';
import * as firebase from 'firebase';
export default class User extends Component {
static navigationOptions = {
title: 'UserInfo',
};
state = {
data: [],
};
// Controllare qui
componentDidMount(){
//leggere array dal db
const currentUID = firebase.auth().currentUser.uid;
const path ="/users/" + currentUID;
const users = firebase.database().ref(path);
users.on("value", snap => {
console.log("log di snap" + snap);
//ciclo
var elenco = [];
snap.forEach(child => {
elenco.push({
name: child.val().name,
surname: child.val().surname,
email: child.val().email,
image: child.val().image,
})
});
console.log("altro log finale" + elenco);
this.setState({data:elenco})
});
}
// controllare fino a qua
render() {
return (
<ScrollView>
<View>
<Card> //fix evertything all'interno di card
{
this.state.data.map((l, i) => (
<ListItem
key={i}
leftAvatar={{ source: { uri: l.image } }}
title={l.name}
subtitle={l.surname}
/>
))
}
</Card>
</View>
</ScrollView>
);
}
}
答案 0 :(得分:2)
我认为问题是因为有评论。在JSX中,//注释不起作用。它将被视为文本。
您必须像下面那样更改您的评论,这样才能解决您的问题
{/* fix evertything all'interno di card */}
答案 1 :(得分:0)
只需从render()中的代码中删除注释和多余的{
}
或按以下方式使用它们即可。在JSX中,render()中不能包含//
:
render() {
return (
<ScrollView>
<View>
<Card>
{ this.state.data &&
this.state.data.map((l, i) => (
<ListItem
key={i}
leftAvatar={{ source: { uri: l.image } }}
title={l.name}
subtitle={l.surname}
/>
))
}
</Card>
</View>
</ScrollView>
);
}
}
iOS在render()
中使用其他语法没有问题,但是在android中它将显示该错误。
同样由于setState
的异步问题,您将遇到undefined is not an object
并出错。因此,最好在ListItem上设置{this.state.data &&
条件。我希望我能帮助:)
答案 2 :(得分:0)
ListItem
应该从react-native-elements
而不是react-native
导入。