javascript - 使用 HOC 命名的导出
问题描述
问题
让我们考虑一下我有一个 SFC(我正在使用 TypeScript)并将其导出为:
export const AppShell: React.SFC<Props> = (props: Props) => (
...
)
一切都好。但是现在在我导出我的组件之前,我想用一个 HOC 来包装它,withStyles
比如MaterialUI。现在我想做类似的事情:
const AppShell: React.SFC<Props> = (props: Props) => (
...
)
并将其导出为:
export const AppShell = withStyles(styles)<Props>(AppShell);
当然这会导致错误:
[ts] Cannot redeclare block-scoped variable 'AppShell'.
权衡的解决方案
据我所知,我现在有两个选择:
1)使用默认导出:
export default withStyles(styles)<Props>(AppShell);
因为我不喜欢默认导出,因为它们有很多缺点,所以我不喜欢那个解决方案。
2) 在包装之前为我的组件使用像“Raw”这样的前缀:
const RawAppShell: React.SFC<Props> = (props: Props) => (
...
)
像这样导出:
export const AppShell = withStyles(styles)<Props>(RawAppShell);
我也更喜欢这种方法,但要权衡添加这个前缀。
其他解决方案
你如何在你的项目中处理这个问题?是否已经有最佳实践解决方案?对我来说,我的组件有一个命名导出非常重要,因此我根本无法接受具有默认导出的解决方案。
先感谢您。
解决方案
只需在一个语句中执行此操作:
export const AppShell: React.SFC<Props> = withStyles(styles)<Props>((props: Props) => (
…
));
推荐阅读
- core-data - 让 NSPersistentCloudKitContainer 在设备之间同步的问题(SwiftUI、iOS)
- sql - 从 No-SQL 数据库移动的数据的 SQL 查询
- python - 在哪里存储大熊猫数据框(由 web 应用程序使用)?
- javascript - 如何在 EJS 模板文件中的 JSON 文件中写入数据
- javascript - 为什么 Blob.getDataAsString 返回长度为零的字符串?
- html - CSS覆盖滚动问题
- python - 如何在不使用 for 的情况下读取大型 NetCDF 数据集 - Python
- javascript - 如何使用 jquery 滚动到第 n 个孩子?
- java - actionView() 的问题 - java.lang.NullPointerException:
- python - python使用全局变量而不在本地范围内将其定义为全局变量