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

React中如何同时获取函数传入的自定义参数与事件对象event

问题原因

你当前的写法会在组件渲染阶段直接执行handleEnter函数,而非绑定为键盘事件的触发回调,同时事件对象e没有被正确传入函数,导致逻辑无法生效。

修复方案

提供两种常用修改方式,可根据习惯选择:

方式1:行内用箭头函数包裹传递参数

修改li标签的onKeyDown绑定逻辑,手动把事件对象和option一起传入:

<ul className="list" data-testid="lists">
  {options.map((option, i) => (
    <li
      role="button"
      tabIndex="0"
      onClick={() => {
        setSelected(option);
        setOpen(false);
      }}
      className={state.cursor === i ? "activeList" : "list-item"}
      {/* 新增箭头函数接收事件对象,再传入handleEnter */}
      onKeyDown={(e) => handleEnter(option, e)}
    >
      {option}
    </li>
  ))}
</ul>

handleEnter函数无需修改,同时建议把已被Web标准废弃的keyCode判断替换为更规范的key属性判断:

const handleEnter = (option, e) => {
  if (e.key === 'Enter') {
    setSelected(option)
    // 如果需要和点击行为一致关闭下拉,可补充 setOpen(false)
  }
};

方式2:让handleEnter返回回调函数

如果不想修改JSX里的绑定写法,可以调整handleEnter的定义,让它接收option后返回一个接收事件对象的回调函数:

// 调整函数定义,第一层接收option,返回的第二层函数接收事件对象
const handleEnter = (option) => (e) => {
  if (e.key === 'Enter') {
    setSelected(option)
  }
};

这种写法下原来的onKeyDown={ handleEnter(option) }不需要做修改即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:36:10