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

React点击搜索结果li标签Link组件不跳转URL无变化问题咨询

React搜索结果点击不跳转问题解决方案

核心原因

  • 你将SuggestionsList组件定义在Searchclients组件内部,父组件每次因输入触发重渲染时,SuggestionsList都会被重新实例化,导致组件内部的Link无法关联到React Router的上下文,跳转逻辑失效
  • 搜索外层包裹了无提交阻止逻辑的form标签,点击元素时可能触发表单默认提交行为,打断路由跳转

修复方案

方案1:将SuggestionsList移到组件外部(推荐)

把SuggestionsList组件的定义挪到Searchclients组件外面,需要的参数通过props传递即可,修改后代码示例:

// 移到Searchclients外面定义
const SuggestionsList = (props) => {
  const {
    suggestions,
    inputValue,
    onSelectSuggestion,
    displaySuggestions,
    selectedSuggestion,
  } = 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 (
              <Link to={`/detiled/${suggestion.id}`} key={index}>
                <li
                  style={styles.listyle}
                  className={classname}
                >
                  {suggestion.firstname}
                </li>
              </Link>
            );
          })}
        </ul>
      );
    } else {
      return <div>No suggestions available...</div>;
    }
  }
  return <></>;
};

const Searchclients = () => {
  // 原有逻辑不变
  // ...
}

同时修改form标签,阻止默认提交:

<form className='search-form' onSubmit={e => e.preventDefault()}>

方案2:改用history.push跳转(无需调整组件嵌套结构)

你已经在父组件引入了useHistory,可以把history通过props传给SuggestionsList,点击li时触发跳转即可,修改示例:

// 父组件传history
<SuggestionsList
  history={history}
  inputValue={inputValue}
  selectedSuggestion={selectedSuggestion}
  onSelectSuggestion={onSelectSuggestion}
  displaySuggestions={displaySuggestions}
  suggestions={filteredSuggestions}
/>

// SuggestionsList里替换Link为点击跳转
<li
  style={styles.listyle}
  key={index}
  className={classname}
  onClick={() => props.history.push(`/detiled/${suggestion.id}`)}
>
  {suggestion.firstname}
</li>

两种方案任选其一即可修复跳转问题,你手动输入地址可以正常访问,说明路由配置和路径拼写都是正确的,不需要调整路由代码。

内容的提问来源于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.30 19:57:01