Инвариантное нарушение: недопустимый тип элемента: React Native

Я начал изучать React Native 4-5 дней назад, и теперь я создаю экран входа в React Native. Но столкнувшись с этой проблемой, я пытаюсь понять это, но, к сожалению, не смог. Ребята, пожалуйста, помогите мне? Прилагаю сюда свой код и скриншот.

App.js
import React, { Component} from 'react';
import { StyleSheet, Text, View } from 'react-native';
import Login from './src/screens/Login';


export default class App extends Component {
  render() {
    return (
       <Login />
    );
  }
}

Вот код экрана входа в систему

Login.js


  import React, { Component} from 'react';
import { StyleSheet, TextInput, View, Image, StatusBar, Dimensions } from 'react-native';
import { LinearGradient } from 'expo';
import EStyleSheet from 'react-native-extended-stylesheet';
import { Button }  from '../components/Button';
import { Ionicons } from '@expo/vector-icons';

const {width: WIDTH} = Dimensions.get('window')

EStyleSheet.build();

export default class Login extends Component {
  render() {
    return (
      <LinearGradient
      colors = {['#38E870', '#2BB256']} 
      style = {styles.container}>
      <StatusBar barStyle = "light-content" />
      <View style = {styles.logocontainer}>
        <Image source = {require('../images/Devastic.png/')} />
      </View>
      <View style = {styles.formContainer}>
      <View style = {styles.inputcontainer}>
      <Ionicons name = "ios-person-outline" size = {36} color = "#747475" 
      style = {styles.inputemail}/>
           <TextInput 
           placeholder = {'Enter Your Email'}
           underlineColorAndroid = {'transparent'}
           placeholderTextColor = "#dfe6e9"
           style = {styles.input}
           />
           <Ionicons name = "ios-unlock-outline" size = {34} color = "#747475" 
      style = {styles.inputpass}/>
           <TextInput 
           placeholder = {'Enter Your Password'}
           secureTextEntry = {true}
           underlineColorAndroid = {'transparent'}
           placeholderTextColor = "#dfe6e9"
           style = {styles.input}
           />     
           <Button
           text = "Log In"
           onPress = {() => console.info ("Pressed")}
            />
            </View>
      </View>
      </LinearGradient>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    alignItems: 'center',
    },
    logocontainer: {
        paddingTop: 50,
    },
    formContainer: {
      backgroundColor: '#FFF',
      marginTop: 180,
      width: 360,
      height: 340,
      borderRadius: 10,
      shadowColor: '#000',
      shadowOffset: { width: 0, height: 2 },
      shadowOpacity: 0.6,
      shadowRadius: 6,
      elevation: 8,
      },
      inputcontainer: {
        marginTop: 30,
      },
      inputemail: {
               position: 'absolute',
               left: 18,
               top: 13,
      },
      inputpass: {
        position: 'absolute',
               left: 18,
               top: 77,
      },

      input: {
      width: WIDTH -50 ,
      height: 44,
      padding: 10,
      paddingLeft: 40,
      marginVertical: 10,
      marginHorizontal: 10,
      borderWidth: 1,
      borderRadius: 20,
      borderColor: 'black',
      marginBottom: 10,
      }
});

вот код файла Button.js

import React from 'react';
    import { View, TouchableHighlight, TouchableNativeFeedback, Text, Platform } from 'react-native';
    import EStyleSheet from 'react-native-extended-stylesheet';

    const styles = EStyleSheet.create({
      $buttonColor: '#38E870',
      $buttonTextColor: '#ffffff',
      $buttonUnderlayColor: '#2BB256',
      button: {
        backgroundColor: '$buttonColor',
        paddingVertical: 10,
        paddingHorizontal: 30,
        marginHorizontal: 12,
        borderRadius: 40,
        marginTop: 20,
        },
      text: {
        color: '$buttonTextColor',
        fontSize: 18,
        textAlign: 'center',
        fontWeight: 'bold',
      },
    });

    export const Button = ({ text, onPress }) => {
      if (Platform.OS === 'ios') {
        return (
          <TouchableHighlight
            onPress = {onPress}
            style = {styles.button}
            underlayColor = {styles.$buttonUnderlayColor}
          >
            <Text style = {styles.text}>{text}</Text>
          </TouchableHighlight>
        );
      }

      return (

        <TouchableNativeFeedback
          onPress = {onPress}
          background = {TouchableNativeFeedback.Ripple(styles.$buttonUnderlayColor)}
        >
          <View style = {styles.button}>
            <Text style = {styles.text}>{text}</Text>
          </View>
        </TouchableNativeFeedback>
      );
    };

ваш код здесь работает нормально, snake.expo.io/ryZBZCMPQ проверьте оператор импорта кнопки в вашем Login.js, правильный ли путь?

slashsharp 28.08.2018 15:43

Да я вижу! Но в системе не работает. Можете попробовать в своей IDE?

user9824674 28.08.2018 16:51

файл находится в вашей системе, как я могу попробовать его на своей, вы убедитесь, что путь правильный?

slashsharp 28.08.2018 16:52

Нашел проблему. На самом деле это было в том, что я не экспортирую должным образом в button.js. Поэтому я удалил экспорт из const и вставил внизу кнопку экспорта по умолчанию; И это сработало ?

user9824674 28.08.2018 17:36
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
1 348
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я думаю, проблема в том, как вы экспортировали компонент Button.

export foo;
import {foo} from 'blah';


export default foo;
import foo from 'blah';

решение твоей проблемы

Замените это

export const Button = ({ text, onPress }) => 

с этим

export default const Button = ({ text, onPress }) => 

для более подробной информации проверьте это более детально

Спасибо! Это тоже сработало !! :-)

user9824674 28.08.2018 19:27

Если этот ответ решит проблему. будет лучше, если вы примете ответ.

Mohammed Ashfaq 29.08.2018 04:20

Нет, это не сработало, когда я попробовал, выдает ту же ошибку, поэтому что делать по умолчанию для экспорта? Кнопка const Button = ({text, onPress}) = И это сработало ?

user9824674 29.08.2018 07:30

В вашем файле Login.js вы импортируете Button как объект.

Измените следующим образом:

Из

import { Button }  from '../components/Button';

К

import Button from '../components/Button';

Для получения дополнительной информации, пожалуйста, посмотрите: Неперехваченная ошибка: инвариантное нарушение: недопустимый тип элемента: ожидается строка (для встроенных компонентов) или класс / функция, но получено: объект

Надеюсь, это поможет!

Сделал то же самое, что и вы, по-прежнему сталкиваетесь с той же ошибкой :-(

user9824674 28.08.2018 16:52

Это была моя проблема. Спасибо!

Keisha W 31.10.2019 04:32

Другие вопросы по теме