【问题标题】:Render React element from object value从对象值渲染 React 元素
【发布时间】:2017-11-07 13:24:05
【问题描述】:

我想创建一个对象:

import React from "react";
import { Registration } from "../../";

const RouteObj = {
  Registration: {
    route: "/registration",
    comp: <Registration />
  }
};
export default RouteObj;

然后,在第二个文件调用中:

import React from 'react';
import RouteObj from ...

class Thing extends React.Component{
  render() {
    <RouteObj.Registration.comp />
  }
}

尝试此操作时,我收到错误:

React.createElement:类型无效 - 需要一个字符串(对于内置组件)或一个类/函数(对于复合组件),但得到:未定义。您可能忘记从定义组件的文件中导出组件。

是否可以用这种方式渲染 React 组件?

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    Registration 已经是一个标签(一个组件),这就是为什么我猜你必须使用大括号来代替。

    import React from 'react';
    import RouteObj from ...
    
    class Thing extends React.Component{
      render() {
        <div>
          {RouteObj.Registration.comp}
        </div>
      }
    }
    

    【讨论】:

      【解决方案2】:
      1. 您必须正确导出RouteObj,作为默认导出。

      因此,在声明 RouteObj 后添加:

      export default RouteObj;
      

      如错误所示,您尝试使用未导出的内容。因此它是未定义的。

      1. 您不能从元素创建元素,您需要从组件类创建元素。因此,您必须将RouteObj.comp 设置为Registration,即组件类本身,而不是Registration&lt;Registration /&gt; 的实例。

      所以,comp 应该是这样的:

      comp: Registration
      

      【讨论】:

      • 对不起,我将编辑代码,我正在正确导出它。包装 {RouteObj.Registration.comp} 像上面一样工作!
      猜你喜欢
      • 1970-01-01
      • 2017-08-11
      • 2021-04-17
      • 2017-08-18
      • 2018-11-29
      • 1970-01-01
      • 2017-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多