【问题标题】:React Router with React v0.14.3使用 React v0.14.3 的 React 路由器
【发布时间】:2016-03-17 09:35:13
【问题描述】:

我正在使用 React 和 Material-UI 创建一个应用程序,我也包含了 React-router。但是当我运行我的应用程序时,出现以下错误(Uncaught TypeError: (0 , _reactDom.ReactDOM) is not a function)。

我正在使用 React v0.14.3 和 React-Router v1.0.2

BodyComponent 我已经写在一个不同的文件中,我将它导入到我的 main.js 中

我尝试了 ReactDOM.render 但我得到以下错误

未捕获的错误:不变违规:元素类型无效:预期为字符串(对于内置组件)或类/函数(对于复合组件)但得到:对象。

我已经为此创建了小提琴:

https://jsfiddle.net/69z2wepo/23814/

以下是我的代码:(更新的代码)

'use strict';
import React from 'react';
import mui from 'material-ui';
import PhysicalView from './playground/PhysicalViewComponent';
import DataTable from './DataTableComponent';
const AppBar = require('material-ui/lib/app-bar');
require('styles//Body.sass');

const LeftNav = require('material-ui/lib/left-nav');

const MenuItem = mui.MenuItem;
const injectTapEventPlugin = require('react-tap-event-plugin');
injectTapEventPlugin();


var menuItems = [{
  route: 'device-view',
  text: 'Device'
}, {
  type: MenuItem.Types.SUBHEADER,
  text: '123'
}, {
  route: 'ola',
  text: 'ola'
}, {
  route: 'bridges',
  text: 'Bridges'
}, {
  route: 'interf',
  text: 'interf'
}, {
  type: MenuItem.Types.LINK,
  payload: 'https://github.com/callemall/material-ui',
  text: 'GitHub'
}, {
  text: 'Disabled',
  disabled: true
}, {
  type: MenuItem.Types.LINK,
  payload: 'https://www.google.com',
  text: 'Disabled Link',
  disabled: true
}];


class BodyComponent extends React.Component {

  _toggleMenu() {
    this.refs.leftNav.toggle();
  }

  render() {
    return (
      < div className = "body-component" >

      < header >

      < AppBar
      title = "vEDM"onLeftIconButtonTouchTap = {
          this._toggleMenu.bind(this)
       }
      iconClassNameRight = "muidocs-icon-navigation-expand-more" / >

      < /header>

      < LeftNav
      ref = "leftNav"
      docked = {
        false
      }
      //openRight = { true }
      menuItems = {
        menuItems
      }
      />

    <DataTable />


    < /div>
  );
}
}

BodyComponent.displayName = 'BodyComponent'

export default BodyComponent;

Main.js

import React from 'react';
import ReactDOM from 'react-dom';
import mui from 'material-ui';
import Body from './BodyComponent';
import  Router  from 'react-router';
import Route from 'react-router';
import createBrowserHistory from 'history/lib/createBrowserHistory';
let history = createBrowserHistory();


ReactDOM.render((
    <Router history={history}>
      <Route path="/" component={Body} />
    </Router>
), document.getElementById('app')) 

下面是我的 package.json 依赖项

"dependencies": {
    "history": "^1.13.1",
    "lodash": "^3.10.1",
    "material-ui": "^0.13.4",
    "normalize.css": "^3.0.3",
    "react": "^0.14.0",
    "react-addons-test-utils": "^0.14.0",
    "react-dom": "^0.14.0",
    "react-router": "^1.0.2",
    "react-tap-event-plugin": "^0.2.1",
    "vis": "^4.10.0"
  }

【问题讨论】:

    标签: javascript reactjs react-router react-jsx react-routing


    【解决方案1】:

    ReactDOM.render( ... )

    你刚刚错过了渲染调用

    【讨论】:

    • 嘿,当我使用 .render 时,我收到以下错误:未捕获错误:不变违规:元素类型无效:需要字符串(对于内置组件)或类/函数(对于复合组件)但得到了:对象。
    • 看起来错误在渲染路径的下方,我会重新检查 React-Router 的文档,然后剥离所有组件。获取它们只是为了渲染一个跨度,当它工作时,然后添加回你的组件。有更好的方法来跟踪渲染图,但这是最简单的概念。
    【解决方案2】:

    我想你忘了调用render 方法。

    ReactDOM.render((
        <Router history={history}>
            <Route path="/" handler={Body} />
        </Router>
    ), document.getElementById('app')) 
    

    【讨论】:

    • 嘿,当我这样做时,我收到此错误(忘记在我的问题中提及):未捕获错误:不变违规:元素类型无效:需要一个字符串(用于内置组件)或类/函数(用于复合组件)但得到:对象。
    • 你试过用component替换handler吗?
    • @juandermarco 你能告诉我怎么做吗?我是第一次使用 react 和 yeoman。
    • 已更改为组件,但仍然遇到相同的问题:未捕获错误:不变违规:元素类型无效:预期字符串(对于内置组件)或类/函数(对于复合组件)但得到: 对象。
    【解决方案3】:

    我在这里看到两个问题:

    1. 正如前面的答案所示,您需要拨打ReactDOM.render( ... )
    2. 您看到的错误是指导入了一些尚未按照您引用的方式导出的内容。确保正确导出和导入组件,即在组件文件中,导出BodyComponent,导入并用作BodyComponent。希望my older answer能帮上忙!

    【讨论】:

    • 1.我现在正在使用 .render。 2) BodyComponent 正确导出。没有路由器,我可以在浏览器中显示我的 Bodycomponent。你可以通过我分享的jsfiddle。
    • 您能否将BodyComponent.jsx 中的代码作为您问题的一部分,以便我们看到整个画面?它是如何导出的?
    • 有趣。你用的是什么react-router 版本?由于您使用的是handler 而不是component,它看起来像是比1.0 更早的东西。在这种情况下,您将需要类似于 import Router from 'react-router'; import { Route } from 'react-router'; 的东西(该模块在 1.0 之前的结构不同)
    • 我正在使用最新的 react-router,但我已经按照他们在 github 页面中提到的方式进行了操作。
    • 你需要import { Router, Route } from 'react-router'; v1.0。
    【解决方案4】:

    你有错误的导入:

    import  Router  from 'react-router';
    import Route from 'react-router';
    

    必须是

    import { Router, Route }  from 'react-router';
    

    【讨论】:

      【解决方案5】:

      你忘记了渲染方法ReactDom.render()

      【讨论】:

        猜你喜欢
        • 2017-12-14
        • 1970-01-01
        • 1970-01-01
        • 2017-01-03
        • 1970-01-01
        • 1970-01-01
        • 2021-04-01
        • 2022-07-07
        • 2018-06-15
        相关资源
        最近更新 更多