13

如何将 routerlink 放在 reactjs 按钮中?

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

第一的

<Link to="/settings">
    <IconButton color="inherit">
        <SettingsIcon />
    </IconButton>
</Link>

第二

<IconButton color="inherit" href="/settings">
    <SettingsIcon />
 </IconButton>
4

3 回答 3

22

@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>
  );
}
于 2021-03-08T09:02:48.213 回答
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>
    );
}
于 2020-05-27T06:52:43.040 回答
0

我能够注入Link如下IconButtonspan这种方法通过在包装Link组件的 a 中捕获它们来保留 material-ui 类和 CSS 样式。同样span也用于存储前向引用ref。我不确定为什么确切需要它,但将其排除在外似乎会产生警告。

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

export default function Component() {
  return (
    <IconButton component={React.forwardRef(
      ({children, ...props}, ref) => (
        <span {...props} ref={ref}><Link>{children}</Link></span>
      )
    )}>
      <SettingsIcon />
    </IconButton>
  )
}
于 2021-10-07T14:40:03.227 回答