Я получаю эту ошибку:
Uncaught Ошибка: Инвариантное Нарушение: Тип элемента недопустим: ожидал строку (для встроенных компонентов) или класс / функцию (для составных компонентов), но получил: объект.
Это мой код:
var React = require('react')
var ReactDOM = require('react-dom')
var Router = require('react-router')
var Route = Router.Route
var Link = Router.Link
var App = React.createClass({
render() {
return (
<div>
<h1>App</h1>
<ul>
<li><Link to="/about">About</Link></li>
</ul>
</div>
)
}
})
var About = require('./components/Home')
ReactDOM.render((
<Router>
<Route path="/" component={App}>
<Route path="about" component={About} />
</Route>
</Router>
), document.body)
Мой Home.jsx
файл:
var React = require('react');
var RaisedButton = require('material-ui/lib/raised-button');
var Home = React.createClass({
render:function() {
return (
<RaisedButton label="Default" />
);
},
});
module.exports = Home;
reactjs
react-router
Панкадж Тхакур
источник
источник
Ответы:
В моем случае ( с использованием Webpack ) это была разница между:
против
Второй работает, в то время как первый вызывает ошибку. Или наоборот.
источник
<TabBarIOS.item>
на<TabBarIOS.Item>
вам нужно экспортировать по умолчанию или требовать (путь) .default
источник
export default
операторов,exports.default
поэтому вы должны использовать их.default
при импорте модуля. Один из способов избавиться от этого - использовать babel-plugin-add-module-exports, который восстанавливает поведение по умолчанию.Вы только что модулировали какой-либо из ваших компонентов React? Если да, вы получите эту ошибку, если вы забыли указать module.exports , например:
немодулированный ранее действующий компонент / код:
модульный компонент / код с помощью module.exports :
источник
module.exports = YourReactComponent
export default class YourReactComponent extends React.Component {
module.exports
все еще получаю ошибкуЕсли вы получаете эту ошибку, это может быть потому, что вы импортируете ссылку, используя
import { Link } from 'react-router'
вместо этого может быть лучше использовать
Я считаю, что это требование для версии 4 реактивного маршрутизатора
источник
react
, а неreact-router-dom
. Исправлена проблема. Никогда не видел это сообщение об ошибке раньше.https://github.com/rackt/react-router/blob/e7c6f3d848e55dda11595447928e843d39bed0eb/examples/query-params/app.js#L4
Router
также является одним из свойствreact-router
. Так что для изменения ваших модулей требуется такой код:Если вы хотите использовать синтаксис ES6, используйте link (
import
), используйте babel в качестве помощника.Кстати, чтобы сделать ваш код работает, мы можем добавить
{this.props.children}
вApp
, какисточник
Не удивляйтесь списку ответов на один вопрос. Есть различные причины для этой проблемы;
Для моего случая предупреждение было
Сопровождается ошибкой
Я не мог понять ошибку, так как она не упоминает ни один метод или имя файла. Я смог решить только после просмотра этого предупреждения, упомянутого выше.
У меня есть следующая строка в index.js.
Когда я погуглил вышеупомянутую ошибку с ключевым словом «ConnectedRouter», я нашел решение на странице GitHub.
Ошибка в том, что когда мы устанавливаем
react-router-redux
пакет, по умолчанию мы устанавливаем этот. https://github.com/reactjs/react-router-redux, но не фактическая библиотека.Чтобы устранить эту ошибку, установите соответствующий пакет, указав область действия npm с помощью
@
Вам не нужно удалять неправильно установленный пакет. Он будет автоматически перезаписан.
Спасибо.
PS: даже предупреждение помогает вам. Не пренебрегайте предупреждением, просто глядя на ошибку в одиночку.
источник
В моем случае один из экспортированных дочерних модулей не возвращал должный компонент реакции.
вместо
Показанная ошибка была для родителя, следовательно, не мог выяснить.
источник
В моем случае это было вызвано неправильными символами комментариев. Это не верно:
Это правильно:
Обратите внимание на фигурные скобки
источник
У меня такая же ошибка: ОШИБКА ИСПРАВЛЕНИЯ !!!!
Я использую 'response-router-redux' v4, но она плохая .. После npm установите response-router-redux @ next, я нахожусь на "Reaction-router-redux": "^ 5.0.0-alpha.9",
И ЭТО РАБОТАЕТ
источник
Я получил это,
import App from './app/';
ожидая, что он будет импортирован./app/index.js
, но вместо этого он импортирован./app.json
.источник
У меня возникла та же проблема, и я понял, что предоставляю компонент Undefined React в разметке JSX. Дело в том, что компонент рендеринга для рендеринга был рассчитан динамически, и он оказался неопределенным!
Ошибка указана:
Пример, выдающий эту ошибку:
Проблема состояла в том, что был предоставлен недопустимый «uiType», и поэтому это приводило к неопределенному результату:
источник
const MyComponent = () => <div>my component</div>;
просто посмотреть, нормально ли тогда работает импорт.Просто как быстрое дополнение к этому. У меня была та же проблема, и пока Webpack компилировал мои тесты, и приложение работало нормально. Когда я импортировал свой компонент в тестовый файл, я использовал неправильный регистр в одном из импортов, и это вызывало ту же ошибку.
Должны были быть
Обратите внимание, что имя импорта
myComponent
зависит от имени экспорта внутриMyComponent
файла.источник
Подобные проблемы возникали с последними версиями React Native 0.50 и выше.
Для меня это была разница между:
а также
(последний исправил проблему). Мне понадобились часы, чтобы уловить этот странный, трудно заметный нюанс :(
источник
Другое возможное решение, которое сработало для меня:
В настоящее время
react-router-redux
находится в бета-версии и npm возвращает 4.x, но не 5.x. Но@types/react-router-redux
вернул 5.х. Так что были использованы неопределенные переменные.Заставить NPM / Yarn использовать 5.x решил это за меня.
источник
Учитывая вашу ошибку:
'Uncaught Error: Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function but got: object'
У вас есть 2 варианта:
Ваш файл экспорта может иметь слово
default
как в.export default class ____....
Тогда ваш импорт должен будет избегать использования{}
вокруг него. Как вimport ____ from ____
Избегайте использования слова по умолчанию. Тогда ваш экспорт выглядит как
export class ____...
Тогда ваш импорт должен использовать{}
. подобноimport {____} from ____
источник
export default {component name}
и забыл добавить егоВ моем случае импорт происходил неявно из-за библиотеки.
Мне удалось это исправить, изменив
export class Foo
в
export default class Foo
,источник
Я столкнулся с этой ошибкой, когда у меня были файлы .jsx и .scss в одном каталоге с тем же корневым именем.
Так, например, если у вас есть
Component.jsx
иComponent.scss
в одной папке, и вы пытаетесь сделать это:import Component from ./Component
Webpack явно запутался и, по крайней мере, в моем случае, пытается импортировать файл scss, когда мне действительно нужен файл .jsx.
Я смог это исправить, переименовав файл .scss и избежав двусмысленности. Я мог бы также явно импортировать Component.jsx
источник
И в моем случае я просто пропустил точку с запятой при импортировании-декларации в одном из моих субмодулей.
Исправлено, изменив это:
к этому:
источник
В моем случае я использовал экспорт по умолчанию, но не экспортировал
function
илиReact.Component
, а простоJSX
элемент, т.е.Ошибка:
Работает :
источник
В дополнение к
import
/export
проблем, упомянутых. Я нашел использовать,React.cloneElement()
чтобы добавитьprops
к дочернему элементу, а затем его рендеринг дал мне ту же ошибку.Я должен был изменить:
чтобы:
Смотрите
React.cloneElement()
документы для получения дополнительной информации.источник
Я получил эту ошибку в реакции маршрутизации, проблема была в том, что я использовал
<Route path="/" component={<Home/>} exact />
но это был неправильный маршрут требует компонента в качестве класса / функции, поэтому я изменил его на
<Route path="/" component={Home} exact />
и это сработало. (Просто избегайте скобок вокруг компонента)
источник
Для меня это было то, что мои стилевые компоненты были определены после определения моего функционального компонента. Это происходило только в постановке, а не локально для меня. Как только я переместил свои styled-компоненты выше определения компонентов, ошибка исчезла.
источник
Это означает, что некоторые из ваших импортированных Компонентов ошибочно объявлены или не существуют
У меня была похожая проблема, я сделал
но когда я посмотрел в общий файл, у меня не было компонента «изображение», а компонент «ItemImage»
Это происходит, когда вы копируете код из других проектов;)
источник
У меня была проблема
React.Fragment
, потому что версия моей реакции была< 16.2
, поэтому я от нее избавился.источник
@Balasubramani M спас меня здесь. Хотел добавить еще одного, чтобы помочь людям. Это проблема, когда вы склеиваете слишком много вещей и не разбираетесь в версиях. Я обновил версию материала-UI и нужно изменить
к этому:
источник
У меня была та же проблема, и проблема была в том, что некоторые js-файлы не были включены в пакет этой конкретной страницы. Попробуйте включить эти файлы, и проблема может быть решена. Я сделал это:
и это исправило проблему для меня.
Это было в то время как я использовал React в Dot NEt MVC
источник
Я обнаружил другую причину этой ошибки. Это связано с тем, что CSS-in-JS возвращает нулевое значение JSX верхнего уровня функции возврата в компоненте React.
Например:
Я бы получил это предупреждение:
После этой ошибки:
Я обнаружил, что это потому, что не было CSS с компонентом CSS-in-JS, который я пытался визуализировать. Я исправил это, убедившись, что возвращается CSS, а не нулевое значение.
Например:
источник
Я получаю почти ту же ошибку:
Я пытался импортировать чистый функциональный компонент из другой библиотеки узлов, разработанной моей командой. Чтобы исправить это, мне пришлось изменить абсолютный импорт (ссылаясь на путь к компоненту внутри
node_modules
) изв
источник
В моем случае это был внешний компонент, импортированный так:
import React, { Component } from 'react';
а затем объявлено как:
export default class MyOuterComponent extends Component {
где внутренний компонент импортировал пустой React:
import React from 'react';
и расставил точки для объявления:
export default class MyInnerComponent extends ReactComponent {
источник
В моем случае мне потребовалось много времени, чтобы найти и проверить возможные пути, но это было исправлено только так: удалите "{", "}" при импорте пользовательского компонента:
Мой неправильный путь был:
Потому что в файле orderDetail.js я экспортировал OrderDetail в качестве класса по умолчанию:
источник