React Material UI +路由器重定向按钮

Mar*_*mal 4 javascript jsx reactjs react-router material-ui

我正在尝试使用Material-UI进行React,但是我不确定重定向到其他页面/组件的正确方法。

我已经阅读了几个有关使用重定向的不同方法的站点react-router-dom,但仍然没有“最终”方法。

history.push

使用无效的方法之一props.history.push('/some-route')。我得到的history是不确定的。我也尝试通过以下方式进行访问props.history

import React, { Fragment } from 'react';
import { Button } from '@material-ui/core';

const Page = props => {
    const { history } = props;

    return (
        <Fragment>
            <Button
                variant="contained"
                color="primary"
                size="large"
                onClick={() => history.push('/some-route')}
            >My Button</Button>
        </Fragment>
    );
};

export default Page;
Run Code Online (Sandbox Code Playgroud)

重定向组件

对我不起作用的另一种方法是使用相同的react-router-dom重定向组件。在这里我没有收到任何错误,单击时它什么也没做:

import React, { Fragment } from 'react';
import { Button } from '@material-ui/core';
import { Redirect } from 'react-router-dom';

const Page = props => {
    const { history } = props;

    return (
        <Fragment>
            <Button
                variant="contained"
                color="primary"
                size="large"
                onClick={() => <Redirect to={'/some-route'} />}
            >My Button</Button>
        </Fragment>
    );
};

export default Page;
Run Code Online (Sandbox Code Playgroud)

样式链接

我发现react-router-dom粘贴相同生成的类名的链接组件仍然可以使用的唯一方法:

import React, { Fragment } from 'react';
import { Link } from 'react-router-dom';

const Page = props => {
    return (
        <Fragment>
            <Link
                class="MuiButtonBase-root-124 MuiButton-root-98 MuiButton-contained-109 MuiButton-containedPrimary-110 MuiButton-raised-112 MuiButton-raisedPrimary-113 MuiButton-sizeLarge-122"
                to="/some-route"
            >My Button</Button>
        </Link>
    );
};

export default Page;
Run Code Online (Sandbox Code Playgroud)

由于我猜错了,我什至没有尝试过的最后一个方法是在Link组件内插入一个Button组件(反之亦然)。

建议您在单击按钮时重定向哪种方式?任何意见表示赞赏。

Fra*_*ion 6

更简单的方法是将react-router-dom Link传递给componentMaterial UI按钮的属性:

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

    ...

    <Button component={Link} to="/some-route" color="primary">
      MyButton
    </Button>

    // OR

    const MyLink = props => <Link to="/some-route" {...props} />

    <Button component={MyLink} color="primary">
      MyButton
    </Button>

Run Code Online (Sandbox Code Playgroud)

材质用户界面示例:https//material-ui.com/demos/buttons/#third-party-routing-library