【问题标题】:Why does material-ui v4 declare useTheme but doesn't implement?为什么material-ui v4声明了useTheme却没有实现?
【发布时间】:2019-11-09 09:48:59
【问题描述】:

我对 Material-uiV4 中新的 Hooks API 感到很困惑。

@material-ui/core 声明了export default function useTheme<T = Theme>(): T;,但没有实现它,因为它出错了。 文档说您应该从有效的@material-ui/styles 导入,但类型设置为未知。

export default function useTheme<T>(): T;

为什么@material-ui/styles 版本默认没有 T = Theme?
为什么@material-ui/core 有一个声明开头?

【问题讨论】:

    标签: reactjs material-ui


    【解决方案1】:

    以下是相关代码和 TypeScript 声明文件的链接:

    @material-ui/styles 以完全独立于 @material-ui/core 的方式提供样式功能(@material-ui/core 依赖于 @material-ui/styles,但 @material-ui/styles 依赖于 @material-ui/core) .

    @material-ui/styles 中的ThemeProvideruseTheme 功能可以与any 主题结构一起使用,因此它具有未知类型是准确的。 @material-ui/core 中的 useTheme 主要是 @material-ui/styles 版本的包装,但它假定主题的结构与 Material-UI 的默认主题匹配,如果没有提供主题(通过 ThemeProvider),那么它将返回默认主题(而@material-ui/styles 版本没有“默认”主题的概念)。

    文档说你应该从 @material-ui/styles 导入

    我很想知道文档的哪一部分是这样说的。只要您使用 Material-UI 的主题结构,我建议您从 @material-ui/core/styles 导入 useTheme

    【讨论】:

    • 我有这两个useTheme的声明文件。使用 VSCode,这两个都可用,其中包含上述类型。一个显然来自核心包,或者我遗漏了一些东西。 node_modules/@material-ui/core/styles/useTheme.d.tsnode_modules/@material-ui/styles/useTheme/useTheme.d.ts
    • 我已经更新了我的答案,因为我更好地理解了你的问题。
    • 这清除了一些事情。文档没有“声明”您“应该”从 @material-ui/styles 导入,而是在示例中使用该导入。阅读您更新的答案后,您会认为这是因为抽象。从那以后,我通过核心而不是直接通过样式包更改了所有导入。奇迹般有效。导致导入失败的错误首先触发了这个问题,即具有多个版本的 material-ui 作为依赖项。
    猜你喜欢
    • 2021-10-11
    • 2023-02-20
    • 1970-01-01
    • 2020-05-12
    • 2021-12-05
    • 1970-01-01
    • 2022-01-23
    • 2019-05-13
    • 1970-01-01
    相关资源
    最近更新 更多