我在 React 项目中使用Material UI Next。我有一个卡片组件,里面有一个图像(卡片媒体)和文本(卡片文本)。我在文本下方还有一个按钮。我的问题是..如何使整个卡片可点击?IE。无论用户按下卡片文本、卡片图像或按钮,它都应该触发我在按钮上调用的 onClick 事件。
如何使用 React JS 在 Material UI 中使整个 Card 组件可点击?
IT技术
javascript
css
reactjs
material-design
material-ui
2021-05-10 00:26:03
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添加一个链接到与按钮相同的功能。
其它你可能感兴趣的问题