Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript this.state.users是一个数组,但仍然不是';无法在平面列表中渲染_Javascript_Firebase_React Native_Firebase Realtime Database_React Native Flatlist - Fatal编程技术网

Javascript this.state.users是一个数组,但仍然不是';无法在平面列表中渲染

Javascript this.state.users是一个数组,但仍然不是';无法在平面列表中渲染,javascript,firebase,react-native,firebase-realtime-database,react-native-flatlist,Javascript,Firebase,React Native,Firebase Realtime Database,React Native Flatlist,所以我现在要做的是:我将Firebase用于我的React原生项目。 用户在中写入其他用户的电子邮件。然后检查数据库中是否存在此电子邮件。如果电子邮件存在,则它将以数组的形式写入状态为users=[]的用户,并应在FlatList中呈现 除了一件事之外,一切都很好:虽然我有一个数组,但FlatList不会渲染任何东西 这是我从console.log(用户)收到的信息: 我的代码就是这样的: state = { promptVisible: false, loading: false,

所以我现在要做的是:我将Firebase用于我的React原生项目。 用户在中写入其他用户的电子邮件。然后检查数据库中是否存在此电子邮件。如果电子邮件存在,则它将以数组的形式写入状态为users=[]的用户,并应在FlatList中呈现

除了一件事之外,一切都很好:虽然我有一个数组,但FlatList不会渲染任何东西

这是我从console.log(用户)收到的信息:

我的代码就是这样的:

 state = {
  promptVisible: false,
  loading: false,
  users: []
 };

findUserEmail = (email) => {
 firebase.database()
 .ref(`/users`)
 .orderByChild("email")
 .equalTo(email)
 .once("value")
 .then(snapshot => {
  if (snapshot.val()) {
    const value = snapshot.val()
    this.setState({ users: Object.keys(value).map((id) => ({
      id,
      ...value[id]
    })), promptVisible: false})
  } else {
    Alert.alert("Email doesn't exist")
  }
  })
 }

 renderItem({item}) {
  return (
 <View style = {styles.contactContainer}>
  <View style={styles.userRow}>
    <View style={styles.userImage}>
      <Avatar
        width={60}
        rounded
        source={{
          uri: "https://upload.wikimedia.org/wikipedia/commons/thumb/6/60/Matterhorn_from_Domhütte_-_2.jpg/1200px-Matterhorn_from_Domhütte_-_2.jpg"
        }}
      />
    </View>
     <View>
      <View style={styles.emailBackground}>
       <Text
         style = {styles.contact} >
         {item.email}
       </Text>
       </View>
       <Text
          style = {styles.message} >
          Da inne lauft öpis...
       </Text>
      </View>
     </View>
   </View>
 )
 }

 render() {
  console.log(this.state.users);
   if (this.state.loading) {
return (
  <View style={{alignItems: 'center', justifyContent: 'center', flex: 1}}>
    <ActivityIndicator size="large" color="dodgerblue" />
  </View>
)
    }
    return (
<View style={styles.container}>
 <Header
   centerComponent={{ text: 'Nachrichten', style: { color: '#FF0000', fontSize: 20, fontWeight: 'bold' } }}
   outerContainerStyles={{ backgroundColor: '#ffffff' }}
   rightComponent={this.renderButton()}
 />
 <View style = {styles.contentContainer}>
  <FlatList
   data={this.state.users}
   renderItem={this.renderItem}
   keyExtractor={item => item.email}
   />
 </View>
  <Prompt
    title="Email eingeben"
    placeholder="Email"
    visible={this.state.promptVisible}
    onCancel={() => this.setState({promptVisible: false})}
    onSubmit={(email) => this.findUserEmail(email)} />
</View>
);
}
状态={
提示:错误,
加载:false,
用户:[]
};
FindUserMail=(电子邮件)=>{
firebase.database()
.ref(`/users`)
.orderByChild(“电子邮件”)
.equalTo(电子邮件)
.一次(“价值”)
。然后(快照=>{
if(snapshot.val()){
const value=snapshot.val()
this.setState({users:Object.keys(value).map((id)=>({
身份证件
…值[id]
})),promptVisible:false})
}否则{
Alert.Alert(“电子邮件不存在”)
}
})
}
renderItem({item}){
返回(
{item.email}
达因内劳夫特皮斯酒店。。。
)
}
render(){
console.log(this.state.users);
if(this.state.loading){
返回(
)
}
返回(
项目.电子邮件}
/>
this.setState({promptVisible:false})
onSubmit={(电子邮件)=>this.findUserEmail(电子邮件)}/>
);
}

所以问题是我做错了什么?我怎样才能修好它

所以我发现了一个错误。这太简单了,同样愚蠢

我刚刚在render中删除了这个组件,一切正常

  <View style = {styles.contentContainer}>

尝试替换此

<FlatList
   data={this.state.users}
   renderItem={this.renderItem}
   keyExtractor={item => item.email}
   />

这并不能解决您的问题,但这正是我建议的故障排除步骤

如果用手工构建的静态数组替换this.state.users,会发生什么情况?这是什么意思?我不明白。创建一个静态数组并使用它而不是使用状态,来解决我应该在哪里传递它的问题?您可以直接将它传递给FlatList的数据属性。如果你还不明白的话,给我一堆用户的数组,我会把它弄清楚的谢谢你,克里斯,但是我之前已经发布了一个答案。这是因为错误的样式表。
<FlatList
   data={this.state.users}
   renderItem={this.renderItem}
   keyExtractor={item => item.email}
   />
<FlatList
   data={[{id: "A", email: "testA@gmail.com"},{id: "B", email: "testB@gmail.com"}]}
   renderItem={this.renderItem}
   keyExtractor={item => item.email}
   />