reactjs - 正确的返回类型的组件返回一个包装的组件
问题描述
我目前正在尝试在React
using中编写一个小包装组件TypeScript
。这是我的包装器:
function ConditionalWrapper({ condition, wrapper, children }: { condition?: boolean, wrapper?: (children: React.ReactNode) => any, children?: React.ReactNode }) {
return condition ? wrapper(children) : children;
}
然后可以像这样使用
<ConditionalWrapper condition={renderInputGroup} wrapper={c => <InputGroup >{c}</InputGroup>} >
...
</ConditionalWrapper>
问题是,我无法确定包装函数的正确返回类型应该是什么。使用当前的实现,我可以编写
<ConditionalWrapper condition={renderInputGroup} wrapper={c => "test"} >
...
</ConditionalWrapper>
这不会给我一个错误,因为any
这里没有错。但这应该是错误的,因为我只想返回另一个组件。
我已经尝试过React.ReactNode
, JSX.Element
, React.Component
,React.FunctionComponent
等等,但到目前为止没有任何效果。
那么,为了在返回 astring
而不是组件时出现错误,正确的返回类型是什么?
解决方案
该wrapper
参数基本上是一个功能组件,因此它需要返回一个ReactElement | null
与功能组件返回的类型相同的值。
wrapper?: (children: React.ReactNode) => ReactElement | null
此外,由于ConditionalWrapper
当前编写的函数体,TypeScript 会给你一个错误,因为wrapper
它被标记为可选,这意味着你不能保证能够调用该方法。wrapper
您应该更新函数的主体以在调用它之前检查提供的内容。IE
return <>{condition && wrapper ? wrapper(children) : children}</>;
推荐阅读
- java - Firebase recycleradapter 与使用 searchview 的过滤器
- javascript - 为递归/嵌套对象数组中的所有路径创建一个键映射
- google-cloud-platform - 如何让服务帐户模拟另一个服务帐户?(Node.js)
- python - 如果成员没有权限,如何显示错误消息?不和谐.py
- javascript - 箭头函数中的 +x 如何返回一个数字数组?
- python - 在 discord.py 中从“int”连接到字符串
- php - 用户名未插入且关系中断
- c# - 对带有换行符的字符串使用 string.Format 时出错
- hibernate - cascadetypes 中缺少 CascadeType.LOCK、CascadeType.REPLICATE、CascadeType.SAVE_UPDATE
- django - 如何从一个视图中在每个模板中显示 django 成功消息?