이 오류가 발생합니다.
잡히지 않는 오류 : 변하지 않는 위반 : 요소 유형이 잘못되었습니다 : 문자열 (내장 구성 요소의 경우) 또는 클래스 / 함수 (복합 구성 요소의 경우)이지만 개체가 있습니다.
이것은 내 코드입니다.
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;
답변
필자의 경우 ( Webpack 사용 )는 다음과 같은 차이점이었습니다.
import {MyComponent} from '../components/xyz.js';
vs
import MyComponent from '../components/xyz.js';
두 번째는 첫 번째 오류가 발생하는 동안 작동합니다. 또는 그 반대입니다.
답변
내보내기 기본값 또는 require (path)가 필요합니다.
var About = require('./components/Home').default
답변
React 컴포넌트를 모듈화 한 적이 있습니까? 그렇다면 module.exports 를 지정하지 않은 경우이 오류가 발생합니다 . 예를 들면 다음과 같습니다.
모듈화되지 않은 이전에 유효한 구성 요소 / 코드 :
var YourReactComponent = React.createClass({
render: function() { ...
module.exports를 사용한 모듈화 된 컴포넌트 / 코드 :
module.exports = React.createClass({
render: function() { ...
답변
이 오류가 발생하면 다음을 사용하여 링크를 가져 오기 때문일 수 있습니다.
import { Link } from 'react-router'
대신 사용하는 것이 좋습니다
' react-router-dom ' 에서 {링크} 가져 오기 ^ -------------- ^
이것이 반응 라우터 버전 4의 요구 사항이라고 생각합니다.
답변
https://github.com/rackt/react-router/blob/e7c6f3d848e55dda11595447928e843d39bed0eb/examples/query-params/app.js#L4
Router
또한의 속성 중 하나입니다 react-router
. 따라서 모듈을 변경하려면 다음과 같은 코드가 필요합니다.
var reactRouter = require('react-router')
var Router = reactRouter.Router
var Route = reactRouter.Route
var Link = reactRouter.Link
ES6 구문 링크 use ( import
)를 사용하려면 babel 을 도우미로 사용하십시오.
BTW, 코드 작동을 위해 다음 과 같이 추가 할 수 있습니다 {this.props.children}
.App
render() {
return (
<div>
<h1>App</h1>
<ul>
<li><Link to="/about">About</Link></li>
</ul>
{this.props.children}
</div>
)
}
답변
단일 질문에 대한 답변 목록에 놀라지 마십시오. 이 문제에는 여러 가지 원인이 있습니다.
제 경우에는 경고가
warning.js : 33 경고 : React.createElement : 유형이 유효하지 않습니다. 문자열 (내장 구성 요소의 경우) 또는 클래스 / 함수 (복합 구성 요소의 경우)가 필요하지만 정의되지 않았습니다. 정의 된 파일에서 컴포넌트를 내보내는 것을 잊었을 수 있습니다. index.js : 13에서 코드를 확인하십시오.
오류가 뒤 따른다
invariant.js : 42 잡히지 않는 오류 : 요소 유형이 잘못되었습니다 : 문자열 (내장 구성 요소의 경우) 또는 클래스 / 함수 (복합 구성 요소의 경우)가 필요하지만 정의되지 않았습니다. 정의 된 파일에서 구성 요소를 내보내는 것을 잊었을 수 있습니다.
메서드 또는 파일 이름이 언급되지 않았기 때문에 오류를 이해할 수 없습니다. 위에서 언급 한이 경고를보고 나서야 해결할 수있었습니다.
index.js에 다음 줄이 있습니다.
<ConnectedRouter history={history}>
키워드 “ConnectedRouter”로 위의 오류를봤을 때 GitHub 페이지에서 해결책을 찾았습니다.
오류는 react-router-redux
패키지 를 설치할 때 기본적으로이 패키지 를 설치하기 때문 입니다.
https://github.com/reactjs/react-router-redux 이지만 실제 라이브러리는 아닙니다.
이 오류를 해결하려면 npm 범위를 지정하여 적절한 패키지를 설치하십시오. @
npm install react-router-redux@next
잘못 설치된 패키지를 제거 할 필요는 없습니다. 자동으로 덮어 씁니다.
감사합니다.
추신 : 심지어 경고 도움이됩니다. 방치하지 마십시오 경고 상기 찾고 단지 오류 혼자.
답변
필자의 경우 내 보낸 자식 모듈 중 하나가 올바른 반응 구성 요소를 반환하지 않았습니다.
const Component = <div> Content </div>;
대신에
const Component = () => <div>Content</div>;
표시된 오류는 부모에 대한 것이므로 파악할 수 없습니다.