未捕获的不变违规:ReactDOM.render():无效的组件元素
Uncaught Invariant Violation: ReactDOM.render(): Invalid component element
我正在尝试使用 React 路由器实现一个导航示例,但遇到了错误。请找到代码
app.js
-------
import React from 'react';
import ReactDOM from 'react-dom';
import Routes from './routes';
ReactDOM.render(Routes, document.getElementById('react-container'));
routes.js
---------
import { React,Component } from 'react';
import { DefaultRoute, Link, Route, RouteHandler,Router } from 'react-router';
import Page1 from './page1';
import Home from './home';
export default class Routes extends Component {
constructor() {
super();
}
render() {
return (
<Router >
<Route path="/" component={Home}>
<Route name="page1" path="/1" component={ Page1 }/>
</Route>
</Router>
);
}
}
home.js
-------
import React, { Component } from 'react';
export default class Home extends Component {
constructor() {
super();
}
render() {
return (
<div>
<Header />
{this.props.children}
</div>
);
}
}
page1.js
--------
import React, { Component } from 'react';
export default class Page1 extends Component {
constructor() {
super();
}
render() {
return (
<div>
<h1> Page 1 </h1>
</div>
);
}
}
我有 babel 转换器可以将 es6 转换为 es5,但在加载应用程序时出现以下错误,
Uncaught Invariant Violation: ReactDOM.render(): Invalid component element. Instead of passing a component class, make sure to instantiate it by passing it to React.createElement.
谁能帮我解决这个问题?
问题出在您的 routes.js 上。您将路由包装在一个组件中,然后将其传递给 ReactDOM.render
。您应该直接传递 jsx。我的建议是从你的 class 中解包路由,然后只导出 jsx。
routes.js
---------
import React from 'react'
import { Router, Route } from 'react-router'
import Page1 from './page1'
import Home from './home'
let routes =
<Router>
<Route path="/" component={Home}>
<Route name="page1" path="/1" component={Page1}/>
</Route>
</Router>
export default routes
错误提示您传递的是 class,而不是调用 React.createElement
。请记住:
let someElement = <div>Hello</div>
会变成这样:
var someElement = React.createElement(
"div",
null,
"Hello"
)
我正在尝试使用 React 路由器实现一个导航示例,但遇到了错误。请找到代码
app.js
-------
import React from 'react';
import ReactDOM from 'react-dom';
import Routes from './routes';
ReactDOM.render(Routes, document.getElementById('react-container'));
routes.js
---------
import { React,Component } from 'react';
import { DefaultRoute, Link, Route, RouteHandler,Router } from 'react-router';
import Page1 from './page1';
import Home from './home';
export default class Routes extends Component {
constructor() {
super();
}
render() {
return (
<Router >
<Route path="/" component={Home}>
<Route name="page1" path="/1" component={ Page1 }/>
</Route>
</Router>
);
}
}
home.js
-------
import React, { Component } from 'react';
export default class Home extends Component {
constructor() {
super();
}
render() {
return (
<div>
<Header />
{this.props.children}
</div>
);
}
}
page1.js
--------
import React, { Component } from 'react';
export default class Page1 extends Component {
constructor() {
super();
}
render() {
return (
<div>
<h1> Page 1 </h1>
</div>
);
}
}
我有 babel 转换器可以将 es6 转换为 es5,但在加载应用程序时出现以下错误,
Uncaught Invariant Violation: ReactDOM.render(): Invalid component element. Instead of passing a component class, make sure to instantiate it by passing it to React.createElement.
谁能帮我解决这个问题?
问题出在您的 routes.js 上。您将路由包装在一个组件中,然后将其传递给 ReactDOM.render
。您应该直接传递 jsx。我的建议是从你的 class 中解包路由,然后只导出 jsx。
routes.js
---------
import React from 'react'
import { Router, Route } from 'react-router'
import Page1 from './page1'
import Home from './home'
let routes =
<Router>
<Route path="/" component={Home}>
<Route name="page1" path="/1" component={Page1}/>
</Route>
</Router>
export default routes
错误提示您传递的是 class,而不是调用 React.createElement
。请记住:
let someElement = <div>Hello</div>
会变成这样:
var someElement = React.createElement(
"div",
null,
"Hello"
)