[reactjs] 잡히지 않는 오류 : 변하지 않는 위반 : 요소 유형이 잘못되었습니다 : 문자열 (내장 구성 요소의 경우) 또는 클래스 / 함수가 필요하지만 다음을 얻습니다.

이 오류가 발생합니다.

잡히지 않는 오류 : 변하지 않는 위반 : 요소 유형이 잘못되었습니다 : 문자열 (내장 구성 요소의 경우) 또는 클래스 / 함수 (복합 구성 요소의 경우)이지만 개체가 있습니다.

이것은 내 코드입니다.

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>;

표시된 오류는 부모에 대한 것이므로 파악할 수 없습니다.