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

React中如何检测点击的是哪个SearchInput组件?

如何检测点击的是哪个SearchInput组件?

你可以通过以下几种简单方式区分点击的是哪个组件:

方式一:给组件传递专属标识参数

给每个SearchInput添加一个标识字段(比如type),在组件内部触发操作时把这个标识传递回父组件:

父组件代码修改:

<SearchInput 
  label={'Cerca Azienda'} 
  type="company"
  company={company} 
  users={users} 
  setSearchResults={setSearchResults} 
/>

<SearchInput 
  label={'Cerca Utente'} 
  type="user"
  company={company} 
  users={users} 
  setSearchResults={setSearchResults} 
/>

SearchInput组件内部处理:

const SearchInput = ({ label, type, setSearchResults, ...rest }) => {
  const handleClick = () => {
    // 把标识type和搜索结果一起传递,父组件就能区分来源
    setSearchResults({
      results: /* 你的搜索结果数据 */,
      source: type
    });
    // 或者如果是单纯的点击事件,也可以单独触发回调告知父组件
  };

  return (
    <div onClick={handleClick}>
      <label>{label}</label>
      {/* 输入框及其他组件内容 */}
    </div>
  );
};

方式二:绑定不同的点击回调函数

在父组件里为每个SearchInput定义独立的点击处理函数,直接传递给组件:

父组件代码:

// 公司搜索组件的点击处理
const handleCompanySearch = () => {
  console.log("点击了公司搜索组件");
  // 这里执行公司数据过滤逻辑
  setSearchResults(/* 公司搜索结果 */);
};

// 用户搜索组件的点击处理
const handleUserSearch = () => {
  console.log("点击了用户搜索组件");
  // 这里执行用户数据过滤逻辑
  setSearchResults(/* 用户搜索结果 */);
};

// 渲染组件
<SearchInput 
  label={'Cerca Azienda'} 
  company={company} 
  users={users} 
  onClick={handleCompanySearch}
/>

<SearchInput 
  label={'Cerca Utente'} 
  company={company} 
  users={users} 
  onClick={handleUserSearch}
/>

SearchInput组件接收回调:

const SearchInput = ({ label, onClick, ...rest }) => {
  return (
    <div onClick={onClick}>
      <label>{label}</label>
      {/* 输入框及其他组件内容 */}
    </div>
  );
};

方式三:利用HTML自定义属性(data-*)

给组件根元素添加自定义data-*属性,通过事件对象获取标识:

父组件代码:

<SearchInput 
  label={'Cerca Azienda'} 
  data-search-type="company"
  company={company} 
  users={users} 
  setSearchResults={setSearchResults} 
/>

<SearchInput 
  label={'Cerca Utente'} 
  data-search-type="user"
  company={company} 
  users={users} 
  setSearchResults={setSearchResults} 
/>

SearchInput组件内部获取标识:

const SearchInput = ({ label, setSearchResults, ...rest }) => {
  const handleClick = (e) => {
    // 从事件对象的currentTarget获取自定义属性值
    const searchType = e.currentTarget.dataset.searchType;
    console.log(`点击了${searchType}搜索组件`);
    // 后续执行对应的数据过滤逻辑
  };

  return (
    <div onClick={handleClick} {...rest}>
      <label>{label}</label>
      {/* 输入框及其他组件内容 */}
    </div>
  );
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:36:21