Uncaught Error: Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class / function but got: object

Dostaję ten błąd:

Uncaught Error: Invariant Violation: Element type is invalid: expected ciąg znaków (dla Wbudowanych komponentów) lub klasa/funkcja (dla kompozytowych components) ale dostał: object.

To jest mój kod:

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)

Mój Home.jsx Plik:

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;
Author: Nicolás Alarcón Rapela, 2015-12-07

30 answers

W moim przypadku (przy użyciu Webpack ) była różnica między:

import {MyComponent} from '../components/xyz.js';

Vs

import MyComponent from '../components/xyz.js';

Drugi działa, podczas gdy pierwszy powoduje błąd. Albo odwrotnie.

 956
Author: JohnL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-27 18:22:46

Potrzebujesz export default lub require (path).default

var About = require('./components/Home').default
 166
Author: jackypan1989,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-07 09:58:06

Czy właśnie zmodularyzowałeś któryś ze swoich komponentów Reactowych? Jeśli tak, pojawi się ten błąd, jeśli zapomniałeś podać moduł .eksport , na przykład:

Niezmodułowany wcześniej ważny komponent/kod:

var YourReactComponent = React.createClass({
    render: function() { ...

Modułowy komponent / kod z modułem .eksport :

module.exports = React.createClass({
    render: function() { ...
 55
Author: charlez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-02 22:08:26

Jeśli pojawi się ten błąd, może to być spowodowane importowaniem linku za pomocą

import { Link } from 'react-router'

Zamiast tego, może lepiej użyć

import { Link } from 'react-router-dom'
                      ^--------------^

Uważam, że jest to wymóg dla reactowego routera w wersji 4

 23
Author: NSCoder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-26 14:15:46

Nie daj się zaskoczyć listą odpowiedzi na jedno pytanie. Istnieją różne przyczyny tego problemu;

W moim przypadku Ostrzeżenie było

Ostrzeżenie.js: 33 Warning: React.createElement: type jest nieprawidłowy -- oczekiwano ciągu znaków (Dla komponentów wbudowanych) lub klasy / funkcji (Dla komponentów złożonych), ale otrzymano: undefined. Prawdopodobnie zapomniałeś wyeksportować komponent z pliku, w którym został zdefiniowany. Sprawdź swój kod w indeksie.js: 13.

Po którym następuje błąd

Niezmienny.js: 42 Uncaught Error: Element type is invalid: expected a string (for built-in components) or a class / function (for composite components) but got: undefined. Prawdopodobnie zapomniałeś wyeksportować komponent z pliku, w którym został zdefiniowany.

Nie mogłem zrozumieć błędu, ponieważ nie wymienia żadnej metody ani nazwy pliku. Byłem w stanie rozwiązać dopiero po spojrzeniu na to Ostrzeżenie, wspomniane powyżej.

Mam następujący wiersz na indeks.js.

<ConnectedRouter history={history}>

Kiedy wyszukałem powyższy błąd za pomocą słowa kluczowego "ConnectedRouter" znalazłem rozwiązanie na stronie GitHub.

Błąd polega na tym, że podczas instalacji pakietu react-router-redux domyślnie instalujemy ten. https://github.com/reactjs/react-router-redux ale nie prawdziwa biblioteka.

Aby rozwiązać ten błąd, zainstaluj odpowiedni pakiet, określając zakres npm za pomocą @

npm install react-router-redux@next

Nie musisz usuwać nieprawidłowo zainstalowanego paczka. Zostanie automatycznie nadpisany.

Dziękuję.

PS: nawet Ostrzeżenie pomaga. Nie zaniedbuj Ostrzeżenia po prostu patrząc na błąd sam.

 20
Author: Balasubramani M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-30 01:28:06

Https://github.com/rackt/react-router/blob/e7c6f3d848e55dda11595447928e843d39bed0eb/examples/query-params/app.js#L4 Router jest również jedną z właściwości react-router. Więc zmień swoje moduły wymagają kodu w ten sposób:

  var reactRouter = require('react-router')
  var Router = reactRouter.Router
  var Route = reactRouter.Route
  var Link = reactRouter.Link

Jeśli chcesz użyć składni ES6 link use (import), Użyj babel jako helper.

BTW, aby Twój kod działał, możemy dodać {this.props.children} w App, jak

render() {
  return (
    <div>
      <h1>App</h1>
      <ul>
        <li><Link to="/about">About</Link></li>
      </ul>
      {this.props.children}
    </div>

  )
}
 18
Author: David Guan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-17 06:30:26

W moim przypadku, jeden z wyeksportowanych modułów potomnych nie zwracał odpowiedniego komponentu reactowego.

const Component = <div> Content </div>;

Zamiast

const Component = () => <div>Content</div>;

Pokazany błąd dotyczył rodzica, więc nie mógł się domyślić.

 16
Author: Katti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-15 03:58:30

W moim przypadku było to spowodowane błędnymi symbolami komentarza. To jest złe:

<Tag>
    /*{ oldComponent }*/
    { newComponent }
</Tag>

To jest poprawne:

<Tag>
    {/*{ oldComponent }*/}
    { newComponent }
</Tag>

Zwróć uwagę na nawiasy klamrowe

 12
Author: tuanh118,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-30 14:27:28

Mam ten sam błąd : NAPRAW BŁĄD !!!!

Używam 'react-router-redux' v4 ale ona jest zła.. Po zainstalowaniu npm react-router-redux@next Jestem na "react-router-redux": "^5.0.0-alpha.9",

AND IT ' S WORK

 11
Author: Thibault Jp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-02 08:20:52

Miałem ten sam problem i zdałem sobie sprawę, że dostarczam Undefined komponent Reactowy w znacznikach JSX. Rzecz w tym, że komponent reactowy do renderowania został obliczony dynamicznie i ostatecznie stał się niezdefiniowany!

Podany błąd:

Naruszenie niezmienne: Typ elementu jest nieprawidłowy: oczekiwano ciągu znaków (Dla komponentów wbudowanych) lub klasy/funkcji (Dla komponentów złożonych), ale otrzymano: undefined. Prawdopodobnie zapomniałeś wyeksportować komponent z pliku jest zdefiniowana w. Sprawdź metodę renderowania C.,

Przykład wywołujący ten błąd:

var componentA = require('./components/A');
var componentB = require('./components/B');

const templates = {
  a_type: componentA,
  b_type: componentB
}

class C extends React.Component {
  constructor(props) {
    super(props);
  }
  
  // ...
  
  render() {
    //Let´s say that depending on the uiType coming in a data field you end up rendering a component A or B (as part of C)
    const ComponentTemplate = templates[this.props.data.uiType];
    return <ComponentTemplate></ComponentTemplate>
  }
  
  // ...
}

Problem polegał na tym, że dostarczono nieprawidłowy "uiType" i dlatego wynik był niezdefiniowany:

templates['InvalidString']
 9
Author: cSn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-25 13:14:37

Otrzymałem to robiąc import App from './app/'; oczekując, że zaimportuje ./app/index.js, ale zamiast tego zaimportował ./app.json.

 8
Author: tybro0103,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-12 20:04:26

Jako szybki dodatek do tego. Miałem ten sam problem i podczas gdy Webpack kompilował moje testy i aplikacja działała dobrze. Kiedy importowałem mój komponent do pliku testowego, używałem nieprawidłowego przypadku na jednym z importów i powodowało to ten sam błąd.

import myComponent from '../../src/components/myComponent'

Powinno być

import myComponent from '../../src/components/MyComponent'

zauważ, że nazwa importu myComponent zależy od nazwy eksportu wewnątrz pliku MyComponent.

 7
Author: Blackout1985,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-08 19:39:52

Miał podobny problem z najnowszymi wersjami 0.50 i nowszymi.

Dla mnie była to różnica między:

import App from './app'

I

import App from './app/index.js'

(ten ostatni naprawił problem). Zajęło mi godziny, aby złapać ten dziwny, trudny do zauważenia niuans : (

 7
Author: Oleg Dater,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-06 15:53:37

Biorąc pod uwagę twój błąd:

'Uncaught Error: Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function but got: object'

Masz 2 opcje:

  1. Twój plik eksportu może mieć słowo default Jak w export default class ____.... Wtedy twój import będzie musiał unikać używania {} wokół niego. Jak w import ____ from ____

  2. Unikaj używania domyślnego słowa. Następnie twój eksport wygląda jak export class ____... Następnie twój import musi użyć {}. Jak import {____} from ____

 7
Author: jasonleonhard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55

Inne możliwe rozwiązanie, które zadziałało dla mnie:

Obecnie {[0] } jest w wersji beta, a npm zwraca 4.x, ale nie 5.x. ale @types/react-router-redux zwróciło 5.X. więc użyto niezdefiniowanych zmiennych.

Zmuszanie NPM / Yarn do użycia 5.x rozwiązał to za mnie.

 6
Author: Florian Richter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-03 21:22:41

W moim przypadku import odbywał się pośrednio z powodu biblioteki.

Udało mi się to naprawić zmieniając

export class Foo

Do

export default class Foo.

 5
Author: thedayturns,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-11 08:59:16

Wpadłem na ten błąd, gdy miałemjsx i .plik scss w tym samym katalogu o tej samej nazwie głównej.

Więc, na przykład, jeśli masz Component.jsx i Component.scss w tym samym folderze i próbujesz to zrobić:

import Component from ./Component

Webpack najwyraźniej się myli i, przynajmniej w moim przypadku, próbuje zaimportować plik scss, kiedy naprawdę chcę .plik jsx.

Udało mi się to naprawić zmieniając nazwę.pliku scss i unikanie niejednoznaczności. Mogłem też wyraźnie importować Komponent.jsx
 5
Author: bergie3000,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-08 22:06:17

A w moim przypadku brakowało mi średnika przy imporcie-deklecji w jednym z moich modułów podrzędnych.

Naprawiono to zmieniając to:

import Splash from './Splash'

Do tego:

import Splash from './Splash';
 4
Author: Rikard Askelöf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-09 09:57:56

W moim przypadku używałem domyślnego eksportu, ale nie eksportowałem function lub React.Component, a tylko element JSX, tzn.

Błąd:

export default (<div>Hello World!</div>)

Działa:

export default () => (<div>Hello World!</div>)
 4
Author: Andru,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-03 15:58:52

Oprócz import/export omówione zagadnienia. Znalazłem użycie React.cloneElement(), Aby dodać props do elementu potomnego, a następnie renderowanie go dało mi ten sam błąd.

Musiałem zmienić:

render() {
  const ChildWithProps = React.cloneElement(
    this.props.children,
    { className: `${PREFIX}-anchor` }
  );

  return (
    <div>
      <ChildWithProps />
      ...
    </div>
  );
}

Do:

render() {
  ...
  return (
    <div>
      <ChildWithProps.type {...ChildWithProps.props} />
    </div>
  );
}

Zobacz React.cloneElement() docs aby uzyskać więcej informacji.

 3
Author: Greg K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-18 10:55:43

Dostałem ten błąd w routingu Reacta, problem polegał na tym, że używałem

<Route path="/" component={<Home/>} exact />

Ale to było złe trasa wymaga komponentu jako klasy / funkcji więc zmieniłem go na

<Route path="/" component={Home} exact />

I zadziałało. (Po prostu unikaj szelek wokół komponentu)
 3
Author: Naxxa Consulting,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-29 08:41:56

Dla mnie było to, że moje styled-components zostały zdefiniowane po mojej definicji funkcjonalnego komponentu. To działo się tylko w inscenizacji, a nie lokalnie dla mnie. Po przeniesieniu moich styled-components powyżej mojej definicji komponentu błąd zniknął.

 1
Author: Jadam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-08 19:33:11

Oznacza to, że niektóre importowane komponenty są błędnie zadeklarowane lub nieistniejące

Miałem podobny problem, zrobiłem

import { Image } from './Shared'

Ale kiedy zajrzałem do udostępnionego pliku, nie miałem komponentu 'Image', a' ItemImage '

import { ItemImage } from './Shared';

Dzieje się tak, gdy kopiujesz kod z innych projektów;)

 1
Author: webmaster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-12 14:52:36

Miałem problem z React.Fragment, ponieważ wersja mojego Reacta była < 16.2, więc się go pozbyłem.

 1
Author: Eugene Ihnatsyeu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-08 11:48:59

Problemem może być również alias używany do domyślnego eksportu.

Zmień

import { Button as ButtonTest } from "../theme/components/Button";

Do

import { default as ButtonTest } from "../theme/components/Button";
Rozwiązałem ten problem.
 1
Author: Simon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-26 21:02:14

@ Balasubramani m Chciałem dodać jeszcze jedną, aby pomóc ludziom. To jest problem, gdy sklejasz zbyt wiele rzeczy razem i jesteś kawalerzystą z wersjami. Zaktualizowałem wersję material-ui i muszę zmienić

import Card, {CardContent, CardMedia, CardActions } from "@material-ui/core/Card"; 

Do tego:

import Card from '@material-ui/core/Card';
import CardActions from '@material-ui/core/CardActions';
import CardContent from '@material-ui/core/CardContent';
import CardMedia from '@material-ui/core/CardMedia';
 0
Author: Kyle Pennell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-21 15:47:40

Miałem ten sam problem i problem polegał na tym, że niektóre pliki js nie były zawarte w pakiecie tej konkretnej strony. Spróbuj włączyć te pliki i problem może zostać rozwiązany. Zrobiłem to:

.Include("~/js/" + jsFolder + "/yourjsfile")

I to naprawiło problem dla mnie.

To było, gdy używałem Reacta w Dot NEt MVC

 0
Author: Jason,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-30 02:26:40

Odkryłem inny powód tego błędu. Ma to związek z CSS-in-JS zwracającym wartość null do najwyższego poziomu JSX funkcji return w komponencie Reactowym.

Na przykład:

const Css = styled.div`
<whatever css>
`;
export function exampleFunction(args1) {
  ...
  return null;
}

export default class ExampleComponent extends Component {
...
render() {
const CssInJs = exampleFunction(args1);
  ...
  return (
    <CssInJs>
      <OtherCssInJs />
      ...
    </CssInJs>
  );
}

Dostałbym to Ostrzeżenie:

Warning: React.createElement: type jest nieprawidłowy -- oczekiwano ciągu znaków (Dla komponentów wbudowanych) lub klasy / funkcji (Dla komponentów złożonych), ale otrzymano: null.

Po którym następuje ten błąd:

Uncaught Error: Typ elementu jest nieprawidłowy: oczekiwano ciągu znaków (Dla komponentów wbudowanych) lub klasy / funkcji (Dla komponentów złożonych), ale otrzymano: null.

Odkryłem, że to dlatego, że nie było CSS z komponentem CSS-in-JS, który próbowałem wyrenderować. Naprawiłem to, upewniając się, że zwrócono CSS, a nie wartość null.

Na przykład:

const Css = styled.div`
<whatever css>
`;
export function exampleFunction(args1) {
  ...
  return Css;
}

export default class ExampleComponent extends Component {
...
render() {
const CssInJs = exampleFunction(args1);
  ...
  return (
    <CssInJs>
      <OtherCssInJs />
      ...
    </CssInJs>
  );
}
 0
Author: codeinaire,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-05 07:03:13

Dostaję prawie ten sam błąd:

Uncaught (w promise) Error: Element type is invalid: oczekiwany łańcuch znaków (Dla komponentów wbudowanych) lub klasa/Funkcja (Dla komponentów złożonych) ale got: object.

Próbowałem zaimportować czysty komponent funkcjonalny z innej biblioteki węzłów, którą opracował mój zespół. Aby to naprawić, musiałem zmienić na import bezwzględny (odwołując się do ścieżki do komponentu wewnątrz node_modules) z

Import FooBarList z "team-ui";

Do

Import FooBarList z 'team-ui / lib/components/foo-bar-list / FooBarList';

 0
Author: Patrick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-30 16:01:11

W moim przypadku skończyło się na zewnętrznym komponencie importowanym w ten sposób:

import React, { Component } from 'react';

A następnie zadeklarowane jak:

export default class MyOuterComponent extends Component {

Gdzie wewnętrzny komponent zaimportował react bare:

import React from 'react';

I wstawione do niego dla deklaracji:

export default class MyInnerComponent extends ReactComponent {

 0
Author: krayzk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-14 20:59:03