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

Semantic-UI Menu组件类转函数组件后点击事件e.target.name为空问题

问题:Semantic-UI React Menu.Item点击时无法获取name的解决方法

你遇到的问题核心是Semantic-UI React组件的事件回调逻辑和原生DOM事件不一样,具体原因和修正方法如下:

问题根源

在你原来的类组件代码中,事件处理函数是这么写的:

handleItemClick = (e, { name }) => this.setState({ activeItem: name })

这里的第二个参数是Semantic-UI组件主动传递的组件属性对象,里面包含了你给Menu.Item设置的name等属性。

但你在函数组件里只尝试通过e.target.name获取值,而e.target指向的往往是Menu.Item内部的子DOM元素(比如包裹文字的<span>),这些元素并没有设置name属性,所以自然返回空值。

修正后的函数组件代码

把事件处理函数改成接收两个参数,直接从第二个参数里解构出name即可:

import React, { useState } from "react";
import { Menu, Segment, Input } from "semantic-ui-react";

function App() {
  const [activeItem, setActiveItem] = useState("home");

  // 接收第二个参数,解构获取组件的name属性
  const setActiveItemOnClick = (e, { name }) => {
    setActiveItem(name);
  };

  return (
    <div>
      <Menu pointing>
        <Menu.Item 
          name="home" 
          active={activeItem === "home"} 
          onClick={setActiveItemOnClick} 
        />
        <Menu.Item 
          name="messages" 
          active={activeItem === "messages"} 
          onClick={setActiveItemOnClick} 
        />
        <Menu.Item 
          name="friends" 
          active={activeItem === "friends"} 
          onClick={setActiveItemOnClick} 
        />
        {/* 还原你类组件里的右侧搜索菜单 */}
        <Menu.Menu position='right'>
          <Menu.Item>
            <Input icon='search' placeholder='Search...' />
          </Menu.Item>
        </Menu.Menu>
      </Menu>
      <Segment>
        <img src="https://react.semantic-ui.com/images/wireframe/paragraph.png" alt="Placeholder content" />
      </Segment>
    </div>
  );
}

export default App;

补充说明

Semantic-UI React的所有交互类组件(比如Menu.Item、Button等)的事件回调,都会额外传递一个组件属性对象作为第二个参数,这个对象包含了你给组件设置的所有自定义属性。这种设计可以避免依赖原生DOM元素的属性,防止组件内部DOM结构变化导致的逻辑失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:21:33