Тип элемента недействителен: ожидается строка (для встроенных компонентов) или класс/функция
import React from 'react';
import ReactDOM from 'react-dom';
import Map from './components/map/container/map';
import App from './App';
import './index.css';
import shell from './shared/utility/shell';
import { render } from 'react-dom'
import { Provider } from 'react-redux'
import { createStore, applyMiddleware, compose } from 'redux'
import { routerMiddleware, ConnectedRouter } from 'react-router-redux'
import thunk from 'redux-thunk'
import createHistory from 'history/createBrowserHistory'
import rootReducer from './reducers'
import registerServiceWorker from './registerServiceWorker';
import { Routes } from './config';
const history = createHistory();
const target = document.querySelector('#root')
const initialState = {};
const enhancers = [];
const middleware = [
thunk,
routerMiddleware(history)
];
if (process.env.NODE_ENV === 'development') {
const devToolsExtension = window.devToolsExtension;
if (typeof devToolsExtension === 'function') {
enhancers.push(devToolsExtension());
}
}
const composedEnhancers = compose(
applyMiddleware(...middleware),
...enhancers
);
const store = createStore(
rootReducer,
initialState,
composedEnhancers
);
render(
<Provider store={store}>
<ConnectedRouter history={history}>
<div>
<Routes />
</div>
</ConnectedRouter>
</Provider>,
target
)
registerServiceWorker();
ReactDOM.render(<App />, document.getElementById('root'));
registerServiceWorker();
Я пытаюсь вызвать API с помощью сокращения и отобразить его данные в таблице. Я получаю эту ошибку. Выше мой файл index.js
.
1. Тип элемента недействителен: ожидается строка (для встроенных компонентов) или класс/функция (для составных компонентов), но получила: undefined. Вероятно, вы забыли экспортировать свой компонент из файла, который он определил.
2. React.createElement: тип недопустим - ожидается строка (для встроенных компонентов) или класс/функция (для составных компонентов), но получила: undefined. Вероятно, вы забыли экспортировать свой компонент из файла, который он определил.
Я упомянул многие ответы, которые я не могу распознать.
Ответы
Ответ 1
Проблема заключается в операторах импорта. Вы не использовали фигурные скобки, импортируя некоторые компоненты, такие как createHistory
.
Если компонент использует экспорт по умолчанию, например:
export default X
Затем вы можете просто импортировать его, как:
import X from './X';
Но если вы используете именованный экспорт, например:
export const X=1;
Затем вам нужно импортировать его в фигурные скобки, например:
import {X} from './X';
Поэтому взгляните на свой импорт. Это решит вашу проблему.
Ответ 2
Я столкнулся с той же проблемой в своем заявлении о реакции. Это определенно ваши заявления о ввозе, как указано выше. Я изменился
import {x} from '/x.js'
в
import x from '/x.js'
и это сделало работу
Ответ 3
Я также столкнулся с этой ошибкой, когда один из вложенных компонентов попытался отобразить компонент, которого не было. В частности, я попытался использовать
<Button ... />
реакционно-зависимый компонент в реактиве, где я должен был использовать
<button ... />
Ответ 4
Что касается меня, я столкнулся с этой проблемой, когда я забыл использовать response-redux connect
в моем экспорте.
Так,
изменение:
export default(mapStateToProps, mapDispatchToProps)(ContentTile);
To:
export default connect(mapStateToProps, mapDispatchToProps)(ContentTile);
решил проблему. Действительно глупая ошибка
Ответ 5
Это также может быть вызвано тем, где находится точка входа.
В моем случае App.js вызывал index.js (где консоль разработчика идентифицировала ошибку и где мой вызов RenderDom был).
Однако App.js ссылался на компонент, и именно в этом компоненте у меня была ошибка (ссылка на еще один компонент, которого не было).
Ответ 6
Как было сказано выше, этот вопрос связан с импортом. В моем случае это был импорт CSSTransitionGroup. После обновления npm пакет "реакция-переход-группа" больше не содержит CSSTransitionGroup, но он содержит различные экспортные операции, такие как CSSTransition и TransitionGroup. Поэтому я просто заменю строку:
import CSSTransitionGroup from 'react-transition-group/CSSTransitionGroup';
с
import TransitionGroup from 'react-transition-group/TransitionGroup';
Ответ 7
В моем случае это было решено путем изменения компонентов: они были записаны в объявлениях функций, и я изменял их классическими объявлениями классов (class App extends React.Component
вместо function App()
)