【问题标题】:Check the render method of `App`检查`App`的渲染方法
【发布时间】:2018-06-04 08:02:27
【问题描述】:

元素类型无效:应为字符串(用于内置组件) 或类/函数(用于复合组件)但得到:未定义。你 可能忘记从定义它的文件中导出您的组件, 或者您可能混淆了默认导入和命名导入。

查看App的渲染方法。

App.js

import React, {Component, Fragment} from 'react';
import {Typeahead, Control} from 'react-typeahead';
import {FormGroup} from 'react-bootstrap';


export default class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      multiple: false
    }
}

    render() {
      const {multiple} = this.state;
      return (

    <Fragment>
      <Typeahead
        labelKey="name"
        multiple={multiple}
        options={[
        'Waylon Dalton',
        'Justine Henderson',
        'Abdullah Lang',
        'Marcus Cruz',
        'Thalia Cobb',
        'Mathias Little',
        'Eddie Randolph',
        'Angela Walker',
        'Lia Shelton',
        'Hadassah Hartman',
        'Joanna Shaffer',
        'Jonathon Sheppard'
      ]}
        placeholder="Choose a state..."
      />
      <FormGroup>
        <Control
          checked={multiple}
          onChange={(e) => this.setState({multiple: e.target.checked})}
          type="checkbox">
          Multi-Select
        </Control>
      </FormGroup>
    </Fragment>
       )
    }
}

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';


ReactDOM.render(<App />, document.getElementById('root'));

我使用 CRA 创建了这个项目。此错误表明我的导入/导出有问题,但我在两个文件的导入/导出中没有发现任何问题,错误集中在 App.js 渲染函数和 index.js 文件的渲染上。我也检查了here,但它对我不起作用,有人可以帮助我。

【问题讨论】:

  • 我认为您需要在APP中的return()内至少定义空div
  • @FadiAboMsalam 试过,它不起作用。
  • 好的,然后将 div 保留在渲染中并尝试删除 react-typeahead 和 react-bootstrap 这应该可以正常工作
  • 顺便说一句,你在用 react-router-dom 吗?你用的是哪个版本
  • 不,我没有使用 react-router-dom,16.4。好的,但我想使用 react-typeahead 和 bootstrap APIs

标签: javascript reactjs


【解决方案1】:

您的应用导入/导出正常。

我认为你混淆了 Fragment 导入(它是 React 的一部分)和 Control 导入:

import React, {Component, Fragment} from 'react';
import {Typeahead} from 'react-typeahead';
import {FormGroup, FormControl as Control} from 'react-bootstrap';

【讨论】:

  • return 里面已经有代码了,但是我还是试过你说的,还是不行。
  • 你能展示一下实际的渲染方法吗?也许您正在渲染的某些组件是undefined
  • 我不熟悉 react-typeahead,但我认为你想使用 import {Fragment} from 'react'
  • 这应该是评论而不是答案
  • 对不起,根据最初的问题,这是答案:)
【解决方案2】:

我也遇到了同样的问题。就我而言,是我使用了来自 MobX 的错误 HOC,即 observable 而不是 observer

如果你犯了同样的错误,你可以通过切换来修复它

export default observable(MyReactComponent);

export default observer(MyReactComponent);

【讨论】:

    【解决方案3】:

    不确定这是否会有所帮助,但这为我解决了问题。

    第一个出现同样错误的代码

    import React from 'react';
    import { BrowserRouter , Route, Link} from 'react-dom';***
    import './App.css';
    

    然后我意识到它实际上应该是

    import React from 'react';
    import { BrowserRouter , Route, Link} from 'react-router-dom';***
    import './App.css';
    

    【讨论】:

      【解决方案4】:

      检查导入语句

      您的导入语句可能没有从正确的文件导入。确保它们都是正确的。

      示例:

      import { Link } from "react"; // oops! hard to see, but that's the wrong file.
      import { Link } from "react-router-dom"; // that's better
      

      检查组件的拼写

      // what's wrong with this?
      const pageOne = () => {
        return (<Link to="/pagetwo"> pagetwo </Link>); // oops! spelling of the component is wrong!
      };
      
      const pageTwo = () => {
        return (<Link to="/"> pageone </Link>);
      };
      

      它们不会起作用,因为组件的拼写不正确。当您知道自己在寻找什么时,就很容易发现。

      【讨论】:

        【解决方案5】:

        我认为问题出在这里:

        import {Typeahead, Fragment, Control } from 'react-typeahead';
        

        Typeahead 导入没问题,但我认为 FragmentControl 是您的错误的根源。 upi 可以尝试删除它们,看看是否有帮助?

        【讨论】:

        • 是的,我删除了 Fragment,发现它是 React 包的导出,但无法弄清楚 Control 导出。
        • 这应该是评论而不是答案
        • @XDX 我认为它是 react-redux-form 的一部分
        • @Weedoze 你能告诉我为什么会这样,所以下次我不这样做时,我已经检查了 react-typeahead 的文档,并且没有导入 Fragment 和 Control,这就是问题
        • @FadiAboMsalam 我理解您的观点,但我认为这是一个评论,因为您使用了诸如“我认为问题...”、“请尝试删除...”之类的词。现在,如果他删除它并且它仍然不起作用?您可以要求 OP 尝试在评论中思考以向问题添加更多信息,当它更清楚时,您可以将其作为答案发布,因为您 100% 确定它会解决问题。这只是我的意见,我不是管理员 :)
        猜你喜欢
        • 1970-01-01
        • 2021-08-17
        • 2021-08-03
        • 2018-02-13
        • 1970-01-01
        • 2021-07-12
        • 2019-01-17
        • 2019-08-22
        • 1970-01-01
        相关资源
        最近更新 更多