我正在try 构建一个Reaction Select 组件,该组件可以支持多种不同的子组件类型.

我想做这样的事情:

export const GenericSelect = (props) => {
  const { component, items } = props;
  return <>{items && items.map((item, index) => <component id={items.id} name={item.name} />)}</>;
};

然后能够像这样使用它:

<GenericSelect component={NonGenericCard} items={items} />

其中,非通用卡支持一组固定的属性(例如,id、名称),这些属性将由Items对象中的值填充.

我试过了,但它似乎不能在运行时创建<component/>.

Is this possible in Javascript? If so, how can it be accomplished?

推荐答案

在JSX中,小写的标记名被认为是HTML标记.所以你应该用Component而不是component.

另外,id应该是item.id而不是items.id,并且您应该 for each 元素分配一个键.

export const GenericSelect = (props) => {
  const { Component, items } = props;
  return (
    <>
      {items &&
        items.map((item, index) => (
          <Component key={item.id} id={item.id} name={item.name} />
        ))}
    </>
  );
};
<GenericSelect Component={NonGenericCard} items={items} />

https://reactjs.org/docs/jsx-in-depth.html#user-defined-components-must-be-capitalized

Javascript相关问答推荐

使用Apps Script缩短谷歌表中的URL?

如何从对象嵌套数组的第二级对象中过滤出键

使用TMS Web Core中的HTML模板中的参数调用过程

如何从JSON数组添加Google Maps标记—或者如何为数组添加参数到标记构造器

使搜索栏更改语言

D3 Scale在v6中工作,但在v7中不工作

函数返回与输入对象具有相同键的对象

WebGL 2.0无符号整数输入变量

如何在JavaScript文件中使用Json文件

正则表达式,允许我匹配除已定义的子字符串之外的所有内容

禁用.js文件扩展名并从目录导入隐式根index.js时,找不到NodeJS导入模块

使用js构造一个html<;ath&>元素并不能使其正确呈现

使用getBorbingClientRect()更改绝对元素位置

Nextjs 13.4 Next-Auth 4.2登录(&Quot;凭据&,{});不工作

在表单集中保存更改时删除';禁用';

每隔3个项目交替显示,然后每1个项目交替显示

使用可配置项目创建网格

ComponentWillReceiveProps仍在React 18.2.0中工作

我们是否可以在reactjs中创建多个同名的路由

AstroJS混合模式服务器终结点返回404