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

React项目中SuggestionsList组件内li的onClick点击事件不生效如何解决?

问题解决方案

核心原因是你将SuggestionsList子组件直接定义在了父组件的函数体内,父组件每次触发状态更新(比如输入框内容变化修改inputValue、filteredSuggestions等状态)时,都会重新创建SuggestionsList组件实例,原有的事件绑定会被销毁重置,这是点击事件无法触发的主要原因。按照以下步骤修改即可解决:

步骤1:将SuggestionsList组件移到父组件外部定义

不要在父组件内部嵌套定义子组件,将SuggestionsList放到父组件代码的外层,把需要用到的点击方法通过props传递给子组件,不要直接使用父组件的闭包函数:

// 移到父组件外部定义
const SuggestionsList = (props) => {
  const {
    suggestions,
    inputValue,
    onSelectSuggestion,
    displaySuggestions,
    selectedSuggestion,
    onItemClick // 新增props接收点击方法
  } = props;

  if (inputValue && displaySuggestions) {
    if (suggestions.length > 0) {
      return (
        <ul className="suggestions-list" style={styles.ulstyle}>
          {suggestions.map((suggestion, index) => {
            const isSelected = selectedSuggestion === index;
            const classname = `suggestion ${isSelected ? "selected" : ""}`;
            // 移除多余的<></>片段
            return (
              <li
                style={styles.listyle}
                onClick={() => onItemClick(suggestion.id)}
                key={index}
                className={classname}
              >
                {suggestion.firstname}
              </li>
            );
          })}
        </ul>
      );
    } else {
      return <div>No suggestions available...</div>;
    }
  }
  return <></>;
};

// 父组件内调用SuggestionsList时传入点击方法
<SuggestionsList
  inputValue={inputValue}
  selectedSuggestion={selectedSuggestion}
  onSelectSuggestion={onSelectSuggestion}
  displaySuggestions={displaySuggestions}
  suggestions={filteredSuggestions}
  onItemClick={finddoctor} // 传递父组件的finddoctor方法
/>

步骤2:阻止form表单默认提交行为

你的输入框嵌套在form标签内,点击li事件冒泡可能触发form默认提交行为,导致页面刷新,看起来就像点击事件没生效。给form标签添加阻止默认提交的逻辑:

<form className="search-form" onSubmit={(e) => e.preventDefault()}>
  {/* 原有内容不变 */}
</form>

步骤3:修正路由路径的多余空格

你当前的history.push逻辑中,路径末尾多了一个多余的空格,会导致路由匹配失败,删掉空格即可:

function finddoctor(e) {
  console.log(e);
  history.push(`/detiled/${e}`); // 删掉路径末尾多余的空格
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:24:04