如何使用 React JS 在 Material UI 中使整个 Card 组件可点击?

IT技术 javascript css reactjs material-design material-ui
2021-05-10 00:26:03

在 React 项目中使用Material UI Next我有一个卡片组件,里面有一个图像(卡片媒体)和文本(卡片文本)。我在文本下方还有一个按钮。我的问题是..如何使整个卡片可点击?IE。无论用户按下卡片文本、卡片图像或按钮,它都应该触发我在按钮上调用的 onClick 事件。

4个回答

v3 更新 - 2018 年 8 月 29 日

Material UI 的 3.0.0 版本中添加了一个特定的CardActionArea组件来专门涵盖这种情况

仅当您坚持使用 v1 时,请使用以下解决方案。

您可能想要实现的是卡片顶部卡片操作(请参阅规范)

Material Components for Web 库将此作为Card Component 的第一个使用示例

通过将 MUICard*组件与强大的ButtonBase组件组合在一起,您可以轻松地重现该确切行为可以在 CodeSandbox上找到一个运行示例https : //codesandbox.io/s/q9wnzv7684

相关代码是这样的:

import Card from '@material-ui/core/Card';
import CardActions from '@material-ui/core/CardActions';
import CardContent from '@material-ui/core/CardContent';
import CardMedia from '@material-ui/core/CardMedia';
import Typography from '@material-ui/core/Typography';
import ButtonBase from '@material-ui/core/ButtonBase';

const styles = {
  cardAction: {
    display: 'block',
    textAlign: 'initial'
  }
}

function MyCard(props) {
  return (
    <Card>
      <ButtonBase
          className={props.classes.cardAction}
          onClick={event => { ... }}
      >
        <CardMedia ... />
        <CardContent>...</CardContent>
      </ButtonBase>
    </Card>
  );
}

export default withStyles(styles)(MyCard)

此外,我强烈建议将该CardActions组件保留ButtonBase.

使用 Material UI 4.9.10,这是有效的。

<Card>
    <CardActionArea href="https://google.com">
        <CardContent>
            <Typography>Click me!</Typography>
        </CardContent>
    </CardActionArea>
</Card>

如果您使用的是react-router,这也有效。

<Card>
    <CardActionArea component={RouterLink} to="/questions">
        <CardContent>
            <Typography>Click me!</Typography>
        </CardContent>
    </CardActionArea>
</Card>

我们还可以使用 Link 标签使整个 Card 组件可点击和导航

import { Link } from 'react-router-dom';
function myCard() {
  return (
    <Link to={'/give_your_path'}>
     <Card>
      <Card text="This is text"/>
     </Card>
    </Link>
  );
}

您可以onClick={clickFunction}向卡片的包含 div添加一个链接到与按钮相同的功能。