javascript - JSX 中的文本类型为 'string',但预期的 'children' 类型是 'string | 元素 | 元素[]
问题描述
我有一个自定义的 React 按钮组件,我希望能够将带有或不带有可选图标(JSX.Element
)的可选字符串作为 cildren。
我的界面看起来像这样
interface IUploadFileButtonProps {
children: string | JSX.Element | JSX.Element[];
}
和实施:
// Does not work
<UploadFileButton>
<FaUpload />
Add new list
</UploadFileButton>
// Works
<UploadFileButton>
No icon, just text
</UploadFileButton>
// Works
<UploadFileButton>
<FaUpload />
</UploadFileButton>
// Works
<UploadFileButton>
<FaUpload />
<FaUpload />
</UploadFileButton>
我收到此错误消息:
JSX 中的文本类型为 'string',但预期的 'children' 类型是 'string | 元素 | 元素[]
我想这是因为 Typescript 需要其中一种类型,但当时不超过一种类型。
如何将可选字符串和/或可选 JSX.Elements 指定为类型(如果有意义的话)?
我可以退出并继续使用any
,但我想知道这种情况下的正确输入。
解决方案
您可以使用 React.ReactNode 键入 children 数组,为什么要定义自己的数组?
interface IUploadFileButtonProps {
children: React.ReactNode;
}
推荐阅读
- android - 更改 build.gradle 文件上的 applicationId 后出现错误
- pytorch - 如何找出torch.nn.Module.parameters()的方法定义
- node.js - 用 npm 链接替换 Docker 容器(Node.js“node:12.4”和“docker-compose”文件的情况)
- r - 将 mutate 与存储的列和过程列表一起使用
- reactjs - react 替代 componentDidReceiveProps
- wordpress - 我如何将现有的 wordpress 迁移到 kubernetes?
- r - gsub 多个替换和一个模式
- razor-pages - 如何在循环内的 Razor 页面中添加赋值 @{} 语句
- reactjs - 我们可以使用按钮来更新状态值吗?
- oracle-sqldeveloper - 执行文件保存时抛出异常