You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NextJS v13.4.19项目中onMouseEnter/onMouseOver事件无法触发求助

解决Next.js 13 App Router中Material-UI Box组件鼠标事件不触发的问题

问题场景

基于Next.js v13.4.19(App Router)创建TypeScript项目,使用Material-UI的Box组件添加onMouseOver/onMouseOut事件,添加'use client'消除服务器组件报错后,鼠标事件仍未触发。

解决建议

  • 升级Material-UI版本
    旧版@material-ui/core(MUI v4)对Next.js 13 App Router支持有限,建议切换到适配React 18和App Router的MUI v5:

    yarn remove @material-ui/core
    yarn add @mui/material @emotion/react @emotion/styled
    
  • 使用正确的鼠标事件属性
    你代码中注释标注的onMouseEnter/onMouseLeave和实际使用的onMouseOver/onMouseOut是两组不同的事件:

    • onMouseEnter/onMouseLeave仅在元素本身触发,不会冒泡
    • onMouseOver/onMouseOut会冒泡到子元素
      若需要元素进入/离开的触发逻辑,直接使用onMouseEnter和onMouseLeave属性。
  • 确保交互区域可被识别
    默认Box为行内元素,可能导致鼠标无法正确触发事件,可通过sx样式扩大交互区域:

    'use client';
    
    import { Box } from '@mui/material';
    
    export default function Home() {
      return (
        <Box
          color="primary"
          onMouseEnter={(e) => console.log("onMouseEnter (first button)")}
          onMouseLeave={(e) => console.log("onMouseLeave (first button)")}
          sx={{ padding: '1rem', backgroundColor: '#f0f0f0', cursor: 'pointer' }}
        >
          Hello World Edit
        </Box>
      );
    }
    
  • 验证客户端组件标记有效性
    确保'use client'是文件第一行(无前置代码、注释或空行),否则客户端组件标记会失效;若Box嵌套在其他组件中,需确保父组件也标记为客户端组件。

内容的提问来源于stack exchange,提问作者Guru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 23:53:21