首页 > 解决方案 > 从字符串创建反应组件

问题描述

我有一个数组列表,我想将字符串与组件名称匹配,这可能吗?我试过这个https://codesandbox.io/s/lpzq3jvjm7

function App() {
  const obj = {
    name: "Name"
  };

  const capitalize = (s) => {
    if (typeof s !== 'string') return ''
    return s.charAt(0).toUpperCase() + s.slice(1)
  }

  return (
    <div className="App">
      {React.createElement(capitalize(obj.name), {
        name: "james"
      })}
    </div>
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

似乎不起作用,有什么线索吗?

标签: javascriptreactjsecmascript-6

解决方案


由于您没有名为Name. 简单的修复?

function Name(props) {
  return props.name
}

function App() {
  const obj = {
    name: Name
  };

  return (
    <div className="App">
      {React.createElement(obj.name, {
        name: "james"
      })}
    </div>
  );
}

james在页面上打印。

更新

你错过了一些东西..首先导入你的组件

import Name from './Name'

在里面Name.js你错过了反应导入

import React from 'react'
export default ({ name }) => <h1>my name is {name}</h1>;

并确保为Name您的对象设置实际值,而不是字符串“名称”

const obj = {
  name: Name
};

密码箱

在此处输入图像描述


推荐阅读