How to make a Material UI react Button act as a react-router-dom Link?

Dio*_*ela 8 javascript reactjs react-router material-ui react-router-dom

How can I make a Material UI react Button component act as a Link component from react-router-dom without losing it's original style? Like changing the route on click.

import Button from '@material-ui/core/Button';

<Button variant="contained" color="primary">
    About Page
</Button>
Run Code Online (Sandbox Code Playgroud)

To something like this, but maintaining the original Button style:

import Button from '@material-ui/core/Button';
import { Link } from 'react-router-dom';

<Button variant="contained" color="primary">
    <Link to="/about">
        About Page
    </Link>
</Button>
Run Code Online (Sandbox Code Playgroud)

and*_*eda 36

MUI 5 进一步简化了这一过程。只需提供一个Button带有href属性的 MUI,如下所示:

import Button from '@mui/material/Button';


<Button href="/" variant="contained">
  Link
</Button>
Run Code Online (Sandbox Code Playgroud)

  • 这不使用react-router Link组件。它使用默认的“a”html 组件。 (6认同)
  • @Maiky 提供“href”属性时用于“Button”的默认组件是锚点“&lt;a&gt;”。但是,您可以通过属性“LinkComponent”指定要使用的组件,例如“LinkComponent={Link}”。 (3认同)
  • 这应该是一个选定的答案。谢谢。 (2认同)

Dio*_*ela 21

Okay, this is very easy, I don't know why it was not working with me:

Just do like this:

import Button from '@material-ui/core/Button';
import { Link } from 'react-router-dom';

<Button component={ Link } to="/about" variant="contained" color="primary">
    About Page
</Button>
Run Code Online (Sandbox Code Playgroud)

  • 看起来现在 MUI 5 版本中有很大不同。https://mui.com/guides/routing/ (4认同)

Pee*_*mar 5

您需要<Button /><Link />组件内部包裹起来。

import Button from '@material-ui/core/Button';
import { Link } from 'react-router-dom';

const ButtonWithLink = () => (
  <Link to="/about">
   <Button variant="contained" color="primary">
     About Page
   </Button>
  </Link>
)
Run Code Online (Sandbox Code Playgroud)

  • 链接内的按钮不是有效的 HTML(另请参阅 /sf/ask/447567921/),即使可以被浏览器解析,其语义很差并且会导致很多问题。 (4认同)
  • 这种方式也有效。只需提供样式即可从“Link”中删除下划线。谢谢 (2认同)