不变违反:不变违反:文本字符串必须在<text>组件中呈现

时间:2019-02-07 16:57:46

标签: javascript reactjs react-native native

在以本机方式运行的应用程序中遇到此问题。基本上,我应该创建一个页面,以打印当前登录到数据库(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>
    );
  }
}

3 个答案:

答案 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导入。