【问题标题】:Uncaught Error: Element type is invalid: expected a string未捕获的错误:元素类型无效:应为字符串
【发布时间】:2017-01-27 09:15:00
【问题描述】:

我已经尝试过 React 文档中的 http://codepen.io/gaearon/pen/VKQwEo?editors=0010,它工作正常。

我想使用 material-ui 制作一个按钮。 这段代码有什么问题?

    import * as React from "react";   
    import * as ReactDOM from "react-dom";
    import {Router, Route, IndexRoute} from "react-router";

    const FlatButton = require('material-ui/FlatButton');


    function Test(props){
    return(
    <div className="test">
    aaa
    <FlatButton label="Default" />
    </div>
    );
    }

    ReactDOM.render(
    <Test

    />
    , document.getElementById('root')
    );

错误:


invariant.js:39 Uncaught Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object. Check the render method of `Test

warning.js:45 Warning: React.createElement: type should not be null, undefined, boolean, or number. It should be a string (for DOM elements) or a ReactClass (for composite components). Check the render method of `Test`

【问题讨论】:

  • 试试import FlatButton from 'material-ui/FlatButton' 或const FlatButton = require('material-ui/FlatButton').default

标签: javascript reactjs typescript material-ui


【解决方案1】:

如果您使用material ui 组件,那么您需要从material-ui 导入MuiThemeProvider, getMuiTheme,然后将您的组件包装为 MuiThemeProvider,试试这个就行了:

import React from "react";   
import ReactDOM from "react-dom";
import {Router, Route, IndexRoute} from "react-router";
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import getMuiTheme from 'material-ui/styles/getMuiTheme';
const getMuiTheme = getMuiTheme({});

import FlatButton from 'material-ui';

 const App = (props) => {

    return (
         <FlatButton label='default'  />
    );
  }

ReactDOM.render(
   <MuiThemeProvider muiTheme={getMuiTheme}>
    <App />
  </MuiThemeProvider>,
  document.getElementById('container')
);

检查jsfiddle 的工作示例:https://jsfiddle.net/u7yvr564/

【讨论】:

  • 如果我只是复制/粘贴我得到错误TS1141: String literal expected.在线import { RaisedButton, MuiThemeProvider, getMuiTheme, FlatButton } from material-ui;
  • 如果我这样做,我会得到很多 error: cannot find,但如果我像这样将 import 更改为 const const MuiThemeProvider = require('material-ui/styles/MuiThemeProvider'); const getMuiTheme = require('material-ui/styles/getMuiTheme').default;,我会得到 React.createElement: type should not be null, undefined, boolean, or number. It should be a string (for DOM elements) or a ReactClass (for composite components) 和 invariant.js:39 Uncaught Error: _registerComponent(...): Target container is not a DOM element.
  • 原因是你用了id = 'root',我用了id = 'container',就用你在html页面中定义的id。
  • 我已经看到了。还是行不通。它仍然给我上一条评论中的 chrome 控制台相同的错误。
  • 你使用了正确的 id 吗??
猜你喜欢
  • 1970-01-01
  • 2016-07-29
  • 2018-02-01
  • 2021-09-27
  • 1970-01-01
  • 2017-09-06
  • 1970-01-01
  • 2016-07-20
  • 2020-11-11
相关资源
最近更新 更多