使用hookrouter反应Material UI Button组件

时间:2019-09-17 17:06:56

标签: javascript reactjs functional-programming react-router react-hooks

我正在尝试将具有钩子的类组件React应用程序迁移到功能组件。

使用类组件时,由于我使用的是Link库,因此我经常将Button组件传递给react-router-dom组件。

但是现在我尝试使用Paratron/hookrouter库进行路由,但是在将A组件传递给Button时遇到错误:

  

TypeError: props.href未定义

我的代码现在看起来像这样:

import React, { Fragment } from 'react';
import { Grid, Button } from '@material-ui/core';
import { A } from 'hookrouter';
import './styles.css';

const Home = props => {
  return (
    <Fragment>
      <Grid container spacing={24} className="landing">
        <Grid item xs={6}>
          <Button 
            variant="contained" 
            color="primary" 
            size="large"
            component={A}
            to="/login"
          >Login</Button>
        </Grid>
        <Grid item xs={6}>
          <Button 
            variant="contained" 
            color="secondary" 
            size="large"
            component={A}
            to="/contact"
          >Contact us</Button>
        </Grid>
      </Grid>
    </Fragment>
  );
}

export default Home;

我猜这个A组件不包含href属性。不知道如何进行。任何意见将不胜感激。

1 个答案:

答案 0 :(得分:3)

您需要提供“ href ”道具,而不是“ to ”道具。

<Fragment>
  <Grid container spacing={24} className="landing">
    <Grid item xs={6}>
      <Button 
        variant="contained" 
        color="primary" 
        size="large"
        component={A}
        href="/login" //href
      >Login</Button>
    </Grid>
    <Grid item xs={6}>
      <Button 
        variant="contained" 
        color="secondary" 
        size="large"
        component={A}
        href="/contact" //href
      >Contact us</Button>
    </Grid>
  </Grid>
</Fragment>

我还必须用类组件包装A,因为A可能是函数组件,并且它们不能容纳ref(这是按钮组件prop所必需的)

您可以参考此有效的CodeSandbox演示