如何在 ReactJS 的 IconButton 中放置 Routerlink

Jos*_*eph 6 reactjs react-router react-router-dom react-material

如何将路由器链接放在 reactjs 按钮中?

我在下面尝试了这两个:第一个更改颜色,而第二个更改颜色,我不喜欢它,因为它正在重新加载页面。

第一的

<Link to="/settings">
    <IconButton color="inherit">
        <SettingsIcon />
    </IconButton>
</Link>
Run Code Online (Sandbox Code Playgroud)

第二

<IconButton color="inherit" href="/settings">
    <SettingsIcon />
 </IconButton>
Run Code Online (Sandbox Code Playgroud)

pio*_*ros 10

@BeHappy 的解决方案很好,但您可以使用组合来实现。无需使用钩子。

import React from 'react';
import { Link } from 'react-router-dom';
import { IconButton } from '@material-ui/core';
import SettingsIcon from '@material-ui/icons/Settings';

export default function Component() {
  return (
    <IconButton component={Link} to="/setting">
      <SettingsIcon />
    </IconButton>
  );
}
Run Code Online (Sandbox Code Playgroud)

  • 我尝试过,但在 Typescript 上遇到错误:-( (没有重载与此调用匹配。) &lt;IconButton component={Link} to="/about"variant="contained" color="primary"&gt; 关于页面 &lt;/IconButton&gt; (7认同)
  • 确保从“react-router-dom”导入“Link”,而不是从“@mui/material/Link”导入,这样才能正常工作。 (3认同)

BeH*_*ppy 6

import React from "react";
import { useHistory } from "react-router-dom";

export default function Component() {
    const history = useHistory();

    return (
        <IconButton color="inherit" onClick={() => history.push("/setting")}>
            <SettingsIcon />
        </IconButton>
    );
}
Run Code Online (Sandbox Code Playgroud)