Невозможно отобразить элементы массива с помощью map в react native

#javascript #reactjs #react-native

#javascript #reactjs #react-native

Вопрос:

Ниже react-native приведен код, который я использую для отображения текста элементов массива map .

 import React from 'react';
import { createStackNavigator } from '@react-navigation/stack';
import {Card} from 'react-native-elements';
import {View, Text} from 'react-native';


class Contact extends React.Component{
    constructor(props){
        super(props);
        this.state={
            arr:["Vipul","Satish","Manisha","Jonty"]
        }
    }
    render(){
        return(
            <Card>
                <Card.Title>Contact Information</Card.Title>
                <Card.Divider />
                <View>
                    {
                        this.state.arr.map(function(elem){
                            console.log(elem)
                            return(
                                <Text>Hello {elem}</Text>
                            );
                        })
                    }
                </View>
            </Card>
        );
    }
}

export default Contact;
  

У меня уже есть настройка массива с состоянием в конструкторе моего класса. Сначала я использовал функцию arrow для возврата <Text> . Но это не сработало. Теперь обычная функция тоже не работает.
Я получаю сообщение об ошибке ниже:

 Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined.
  

Однако, если я заменю свою функцию рендеринга на это:

 render(){
   return(<View><Text>Hello world</Text></View>);
}

  

тогда все работает нормально, и я получаю Hello world на экране. Кроме того, console.log в приведенном выше коде корректно печатаются все элементы массива, но просто элементы не отображаются.

Я проверил другие темы, похожие на эту, но не смог получить никакой помощи.

Спасибо! Состояние таково:

 constructor(props){
        super(props);
        this.state={
            arr:["Vipul","Satish","Manisha","Jonty"]
        }
    }
  

Редактировать:
Это то, что было указано на их официальном сайте:

 <Card>
  <Card.Title>CARD WITH DIVIDER</Card.Title>
  <Card.Divider/>
  {
    users.map((u, i) => {
      return (
        <View key={i} style={styles.user}>
          <Image
            style={styles.image}
            resizeMode="cover"
            source={{ uri: u.avatar }}
          />
          <Text style={styles.name}>{u.name}</Text>
        </View>
      );
    })
  }
</Card>
  

Вы можете видеть, что мой код похож на этот, поэтому он должен работать именно так.

Комментарии:

1. Я на 99% уверен, что проблема в вашей государственной структуре. Пожалуйста, разместите это здесь.

2. Если бы это была проблема с состоянием, консолью. в журнале не было бы напечатанных элементов.

3. Состояние кажется правильным. Не могли бы вы опубликовать <Card /> ? Я вижу, что вы визуализируете Card , а затем Card.Divider и Card.Title т. Д. Как это может быть?

4. Я видел это на их официальном сайте.

Ответ №1:

не уверен, для какой библиотеки вы используете Card , но в качестве дочернего элемента может потребоваться title prop, а не строка.

Комментарии:

1. Я использую react-native-elements для Card

2. вы показываете весь код? я подозреваю, что проблема где-то не отображается

3. Я должен сказать, что проблема заключается в самой карте, потому что, как я уже сказал, если я удалю все из рендеринга и просто верну hello world, он работает нормально.

4. смотрите официальные документы react-native card:reactnativeelements.com/docs/card

5. После того, как я почесал голову в течение часа, я обнаружил, что проблема заключается в <Card.Title> . Я думаю, что он должен использовать title в качестве реквизита.