如何组合 ReactJs Router Link 和 material-ui 组件(如按钮)?
How to combine ReactJs Router Link and material-ui components (like a button)?
我需要找到一个解决方案,以便能够将 React 路由器的功能与 material ui 组件结合在一起。
例如,我有这个场景:一个路由器和一个按钮。我试图做的是将它们混合在一起,然后重新设计它们。
所以从一个简单的 link
<Link className={this.getClass(this.props.type)} to={`${url}`} title={name}>{name}</Link>
我尝试创建一个 material ui 按钮如下
<Link className={this.getClass(this.props.type)} to={`${url}`} title={name}>
<FlatButton label={name} />
</Link>
但是我有以下错误并且Javascript中断
invariant.js?4599:38Uncaught Invariant Violation: addComponentAsRefTo(...): Only a ReactOwner can have refs. You might be adding a ref to a component that was not created inside a component's render
method, or you have multiple copies of React loaded (details: https://gist.github.com/jimfb/4faa6cbfb1ef476bd105).
你知道如何处理这种情况吗?
在此先感谢您,如果您需要更多信息,请告诉我
这对我有用:
<FlatButton label="Details"
containerElement={<Link to="/coder-details" />}
linkButton={true} />
新版本的做法是:
import { Link } from 'react-router-dom';
// ... some code
render(){
return (
<Button component={Link} to={'/my_route'}>My button</Button>
);
}
看看这个thread or this
使用打字稿时可以这样试试:
import { NavLink as RouterLink } from "react-router-dom";
import {
Button,
Collapse,
ListItem,
makeStyles,
ListItemIcon,
ListItemText,
} from "@material-ui/core";
type NavItemProps = {
className?: string;
depth: number;
href?: string;
icon?: any;
info?: any;
open?: boolean;
title: string;
};
const NavItem: React.SFC<NavItemProps> = ({
const CustomLink = React.forwardRef((props: any, ref: any) => (
<NavLink
{...props}
style={style}
to={href}
exact
ref={ref}
activeClassName={classes.active}
/>
));
return (
<ListItem
className={clsx(classes.buttonLeaf, `depth-${depth}`)}
disableGutters
style={style}
key={title}
button
component={CustomLink}
{...rest}
>
<ListItemIcon>
{Icon && <Icon className={classes.icon} size="20" />}
</ListItemIcon>
<ListItemText primary={title} className={classes.title} />
</ListItem>
);
})
<Button
size="large"
color="primary"
onClick={() => {}}
variant="outlined"
component={RouterLink}
to={{
pathname: `enter your path name`,
}}
>
Click Here
</Button>
我需要找到一个解决方案,以便能够将 React 路由器的功能与 material ui 组件结合在一起。
例如,我有这个场景:一个路由器和一个按钮。我试图做的是将它们混合在一起,然后重新设计它们。
所以从一个简单的 link
<Link className={this.getClass(this.props.type)} to={`${url}`} title={name}>{name}</Link>
我尝试创建一个 material ui 按钮如下
<Link className={this.getClass(this.props.type)} to={`${url}`} title={name}>
<FlatButton label={name} />
</Link>
但是我有以下错误并且Javascript中断
invariant.js?4599:38Uncaught Invariant Violation: addComponentAsRefTo(...): Only a ReactOwner can have refs. You might be adding a ref to a component that was not created inside a component's
render
method, or you have multiple copies of React loaded (details: https://gist.github.com/jimfb/4faa6cbfb1ef476bd105).
你知道如何处理这种情况吗? 在此先感谢您,如果您需要更多信息,请告诉我
这对我有用:
<FlatButton label="Details"
containerElement={<Link to="/coder-details" />}
linkButton={true} />
新版本的做法是:
import { Link } from 'react-router-dom';
// ... some code
render(){
return (
<Button component={Link} to={'/my_route'}>My button</Button>
);
}
看看这个thread or this
使用打字稿时可以这样试试:
import { NavLink as RouterLink } from "react-router-dom";
import {
Button,
Collapse,
ListItem,
makeStyles,
ListItemIcon,
ListItemText,
} from "@material-ui/core";
type NavItemProps = {
className?: string;
depth: number;
href?: string;
icon?: any;
info?: any;
open?: boolean;
title: string;
};
const NavItem: React.SFC<NavItemProps> = ({
const CustomLink = React.forwardRef((props: any, ref: any) => (
<NavLink
{...props}
style={style}
to={href}
exact
ref={ref}
activeClassName={classes.active}
/>
));
return (
<ListItem
className={clsx(classes.buttonLeaf, `depth-${depth}`)}
disableGutters
style={style}
key={title}
button
component={CustomLink}
{...rest}
>
<ListItemIcon>
{Icon && <Icon className={classes.icon} size="20" />}
</ListItemIcon>
<ListItemText primary={title} className={classes.title} />
</ListItem>
);
})
<Button
size="large"
color="primary"
onClick={() => {}}
variant="outlined"
component={RouterLink}
to={{
pathname: `enter your path name`,
}}
>
Click Here
</Button>