繁体   English   中英

如何创建和使用在 Typescript 中呈现 {props.children} 的样式组件?

[英]How to create and use a styled-component that renders {props.children} in Typescript?

我有一个ExternalLink组件,用于呈现外部 URL 的锚标记。 我已经使用styled-components实现了它。

代码沙盒链接

外部链接.tsx

它基本上获得了一个href道具并将孩子们渲染为{props.children}

const LinkAnchor = styled.a``;

interface ExternalLink_I {
  className?: string;
  href: string;
}

const ExternalLink: React.FC<ExternalLink_I> = (props) => {
  console.log("Rendering ExternalLink...");

  return (
    <LinkAnchor
      className={props.className} // ALLOW STYLING WITH STYLED-COMPONENTS
      href={props.href}
      target="_blank"
      rel="noopener noreferrer"
    >
      {props.children}
    </LinkAnchor>
  );
};

但是在与孩子一起渲染此组件时出现错误。

应用程序.tsx

export default function App() {
  return (
    <ExternalLink href={"https://www.google.com"}>
      EXTERNAL_LINK
    </ExternalLink>
  );
}

在此处输入图片说明

这是文本格式的错误消息:

输入'{孩子:字符串; href:字符串; }' 不可分配给类型 'IntrinsicAttributes & ExternalLink_I'。

类型“IntrinsicAttributes & ExternalLink_I”.ts(2322) 上不存在属性“children”


我究竟做错了什么? 我怎样才能摆脱这个?

您也应该添加children类型:

interface ExternalLink_I {
  ...
  // or React.element, React.ReactNode etc
  children: string;
}

你忘了提到 ExternalLink 组件被包裹在 React.memo 中。 众所周知,'children' 属性会导致 React.memo 出现问题,因此从组件的类型定义中删除。 同时查看您的代码,似乎没有进行任何大的优化。 删除它会修复类型错误,或者您可以选择忽略它。

以下是有关此问题的一些轻松阅读:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM