微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何根据 prop 值加载反应组件

如何解决如何根据 prop 值加载反应组件

我正在使用带有“@fluentui/react-northstar”库的图标组件,如下所示

import { QnaIcon } from '@fluentui/react-northstar'
const Example1 = () => (
  <>
    <QnaIcon size="large" />
  </>
) 

现在我必须在图标名称来自像这样的道具时动态加载图标组件

import React from 'react'
import { Button,TeamCreateIcon   } from '@fluentui/react-northstar' 

const Example2 = ({iconName}) => {
 
const MyIcon = <iconName /> ; //here I need to convert string to component 

return (
  <div >
     <Button icon={<TeamCreateIcon />} title="Create" />
     // Here I need set it
     <Button icon={<MyIcon />} title="Create" />    
  </div>
)} 
<Example2 iconName='QnaIcon' />  

code https://codesandbox.io

解决方法

我是巴西人,因此我会说葡萄牙语,但我会使用翻译来帮助您。

您可以执行以下操作:

import React from 'react'
import { Button,TeamCreateIcon   } from '@fluentui/react-northstar' 

const Example2 = ({iconName}) => {

const ICONS = {
  iconLike: <YourLikeIcon/>,iconMenu: <YourMenuIcon/>,}

return (
  <div >
     <Button icon={<TeamCreateIcon />} title="Create" />
     // Here I need set it
     <Button icon={ICONS[iconName]} title="Create" />    
  </div>
)} 

但是您必须小心使用 iconName,因为如果它不正确,它可能会出错。为了防止你可以提前做一些测试。

,

我宁愿以不同的方式来做。我会将组件本身作为道具传递给 Example2

<Example2>
  <Icon/>
</Example2>

在实际组件中,我会使用 props.children,它包含我们上面提到的子组件

import React from 'react'

const Example2 = () => {
 

return (
  <div >
     <Button icon={props.children} title="Create" />
     <Button icon={<MyIcon />} title="Create" />    
  </div>
)} 

编辑

包括代码和框链接

https://codesandbox.io/s/fluent-ui-example-forked-p5lkk?file=/example.js

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。