我希望改变一个只有一个图像的卡到一个有内容的卡.基本上在我的公文包上,我想要显示我的项目的徽标,然后当鼠标悬停在它上面时,它应该显示标题/使用的语言/描述.我目前的代码是:

              <Card sx={{ width: 1, height: 250 }}>
                <CardActionArea>
                  <CardMedia
                    sx={{ 
                      height: 250,
                      ':hover': {
                        // call a function here I believe?
                      },
                     }}
                    image={project.image}
                    title="green iguana"
                  />
                </CardActionArea>
              </Card>

推荐答案

辛格的 idea 是正确的.但是,示例代码更改了CardMedia组件的CSS属性,而问题询问如何更改MUI卡本身的内容.下面的示例更改了MUI卡的内容.它可以在这live demo中看到.演示code repository现已推出.该组件的主要代码如下所示.

App.jsx

...

import img from './../assets/images/purple.jpg';

const App = () => {

    const [ isHovered, setIsHovered ] = useState( false );
    const project = {
        image: img
    };

    function handleMouseOver() {
        setIsHovered( true );
    }

    function handleMouseOut() {
        setIsHovered( false );
    }

    return (
        <Card sx={{ width: '360px', height: '250px' }}>
            <CardActionArea
                onMouseOver={ handleMouseOver }
                onMouseOut={ handleMouseOut }
            >
                { isHovered
                    ?     <CardContent sx={ { minHeight: '220px' } } >
                            <CardHeader
                                action={
                                    <IconButton aria-label="settings">
                                    <MoreVertIcon />
                                    </IconButton>
                                }
                                title="My Title"
                                subheader="All the cool languages"
                            />
                            <Box ml={ 2 }>
                                <Typography variant="body1" color="text.primary">
                                    More information...
                                </Typography>
                                <Typography variant="body1" color="text.primary">
                                    Description of my cool projects!
                                </Typography>
                            </Box>
                            <CardActions>
                                <IconButton>
                                    { 'Click Me to Learn More!' }
                                    <TouchAppIcon size={ 'large' } />
                                </IconButton>
                            </CardActions>
                        </CardContent>
                    :   <CardMedia
                            sx={{
                                height: 250,
                                '&:hover': {
                                    '*': 'inherit' // Nope. Code does not go here.
                                },
                             }}
                            image={ project.image }
                            title="green iguana"
                        />
                }
            </CardActionArea>
        </Card>
    );
};

export default App;

Update

多张卡片的悬停效果

所需的更改位于如下所示的代码行中.

export default function Projects() {
    const [isHoveredId, setIsHoveredId] = useState( '' );
    let projectList;

    function handleMouseOver( ID ) {
        return () => {
            setIsHoveredId( ID );
        }
    }

    function handleMouseOut() {
         setIsHoveredId( '' );
    }

    if (ScreenDetection() === false) {
        projectList = (
            <div className="grid grid-cols-2 gap-6 pt-10">
                {projects.map((project) => (
                    <Card sx={{ width: 1, height: 250 }}>
                        <CardActionArea
                            onMouseOver={handleMouseOver( project.title )}
                            onMouseOut={handleMouseOut}
                            href={project.link}
                            rel="noopener noreferrer"
                            target="_blank"
                        >
                            {isHoveredId == project.title ? (

Reactjs相关问答推荐

如何使用react-router-dom导航到网页中的其他路由?

404使用GitHub操作部署Next.js应用程序时出错

如何将Redux工具包添加到expo (SDK 50)项目?

如何解决Reaction中遗留的上下文API错误?

未定义发送的数据无法在reactjs中找到原因

React useEffect 问题...异步函数内的变量正在获取延迟的更新值

CORS策略:对预检请求的响应未通过访问控制判断:没有Access-Control-Allow-Origin

React + Redux:数据未正确传递给具有动态路由的组件

条件渲染元素的测试不起作用

如何在同一路由路径上重新渲染组件(链接,V6)reactjs

如何向 surveyjs 调查添加多个结尾?

如何将值从下拉列表传递到 select 上的输入?响应式JS

Cypress - 替换 React 项目中的变量

如何定制 React 热 toastr ?

如何根据react 中的 map 功能一次只打开一个弹出窗口?

理解 React 中的 PrevState

使用 React、Redux 和 Firebase 的无限循环

为什么 React 会多次调用我的应用程序的某些函数?

在 React 中使用使用状态挂钩合并两个数组

根据计算 ReactJs 更新输入字段