首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包装ForwardRef组件时Chakra-ui中的IconButton错误

包装ForwardRef组件时Chakra-ui中的IconButton错误
EN

Stack Overflow用户
提问于 2022-03-05 10:17:01
回答 1查看 1.4K关注 0票数 0

我创建了一个可重用的组件,它封装了IconButton,并将其作为来自react-icons的道具图标之一传递。

我得到以下错误:

警告:不能给函数组件参考。访问此引用的尝试将失败。你是说要使用React.forwardRef()吗?

以下是我的组件包装:

代码语言:javascript
复制
export function SidebarMenu({ icon, isActive, handleMenuClick, name }) {
  return (
    <IconButton
      className={isActive ? 'active' : ''}
      aria-label={name + ' menu'}
      isActive={isActive}
      bg="transparent"
      px="0"
      as={icon}
      _hover={{
        cursor: 'pointer',
        backgroundColor: 'transparent',
      }}
      _active={{
        backgroundColor: 'transparent',
      }}
      onClick={() => handleMenuClick(name)}
    />

下面是我如何使用包装器组件

代码语言:javascript
复制
   <SidebarMenu
    icon={VscCode}
    name="folders"
    handleMenuClick={handleMenuClick}
    isActive={menuList.folders}
   />

但是,如果我将内容IconButton改为使用包装在Button中的Icon,错误就会消失。

代码语言:javascript
复制
export function SidebarMenu({ icon, isActive, handleMenuClick, name }) {
  return (
    <Button
      className={isActive ? 'active' : ''}
      aria-label={name + ' menu'}
      isActive={isActive}
      bg="transparent"
      px="0"
      // as={icon}
      _hover={{
        cursor: 'pointer',
        backgroundColor: 'transparent',
      }}
      _active={{
        backgroundColor: 'transparent',
      }}
      onClick={() => handleMenuClick(name)}
    >
      <Icon as={icon} w={7} h={7} />
    </Button>
  );
}

编辑:适用于任何可能遇到同样问题的人。这里有几件事我做错了。

IconButton

  • Second,中,
  1. I使用的是as而不是icon螺旋桨--我是在传递一个引用而不是组件,而不是执行<IconButton icon={<VsColorMode />} />,我是在执行这个<IconButton icon={VsCodeMode} />.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-05 11:30:48

根据文档,IconButton有自己的支柱icon,因此,在本例中,不要使用as,而是使用iconIcon

代码语言:javascript
复制
function SidebarMenu({ icon }) {
  return (
    <IconButton
      bg="transparent"
      px="0"
      icon={<Icon as={icon} w={7} h={7} />}
      // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      _hover={{
        cursor: "pointer",
        backgroundColor: "transparent"
      }}
      _active={{
        backgroundColor: "transparent"
      }}
    />
  );
}

码箱演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71361307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档