首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MUI v5 + styled() + ListItemButton:属性'to'/'component‘不存在

MUI v5 + styled() + ListItemButton:属性'to'/'component‘不存在
EN

Stack Overflow用户
提问于 2021-10-14 09:43:12
回答 1查看 193关注 0票数 1

在从MUI v4迁移到v5的过程中,我遇到了这个障碍:在v4中,我使用了makeStyles(),但现在我想完全迁移到styled():我无法让Typescript接受具有to=component=属性的styled(ListItemButton)(...)

我看过并阅读过MUI关于Wrapping components的指南,它实际上让我的事情变得更不清楚;诚然,我既不是打字专家,也不是MUI向导。我的困惑是由于指南的例子不完整,比如明显缺少一些非明显的导入,似乎需要导入符号重命名,因此自动补全将不起作用或出现多个候选。

这是一个触发Typescript错误的最小化示例,参见下面的codesandbox链接。

代码语言:javascript
复制
import React from "react"
import {
  Avatar,
  Link,
  ListItemAvatar,
  ListItemButton,
  styled
} from "@mui/material"

const ListItemButtonLink = styled(ListItemButton)(({ theme }) => ({
  // ...here be styling
}))

interface LinkedListItemProps {
  path: string
}

export const LinkedListItem = ({ path }: LinkedListItemProps) => {
  return (
    <ListItemButtonLink key={42} dense to={path} component={Link}>
      <ListItemAvatar>
        <Avatar>A</Avatar>
      </ListItemAvatar>
      Here Be Item
    </ListItemButtonLink>
  )
}

我完全不知道如何让它工作,因为Guide示例也没有通过Typescript检查。

通过查看MUI问题,我发现了一个解决了Guide问题的问题,但似乎并没有以我可以使用的方式来解决它。

我也看过和读过MUI button with styled-components including react router Link,但解决方案基本上是某种非Typescript指南版本。

(更新版)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-14 09:48:42

您正在使用来自MUI包的Link,此Link只是一个锚元素,但与MUI主题有更好的样式集成,您可能想要使用的Link来自具有to属性的react-router,因此将您的代码更改为:

代码语言:javascript
复制
import { Link } from "react-router-dom";

如果您使用styled并希望生成的组件具有来自react- to的属性类型,则可以将泛型类型参数添加到HOC:

代码语言:javascript
复制
import { Link, LinkProps } from "react-router-dom";

const ListItemButtonLink = styled(ListItemButton)<LinkProps>(({ theme }) => ({
  // ...here be styling
}));

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69568490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档