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

Ionic Router问题:点击列表项后子页面需刷新才加载

修复Ionic React列表项点击后需刷新才能跳转的问题

问题原因

在IonTabs组件环境下,IonItem的routerLink属性可能无法正确关联到当前tab对应的IonRouterOutlet,导致路由跳转后页面没有即时渲染,需要手动刷新才能加载目标页面。

修复方案

方案一:为IonItem指定tab属性

在GameListPage.tsx的IonItem上添加tab="games"属性,明确指定跳转时保持在当前的games tab中:

<IonList>
  {gamesJson.map((game) => (
    <IonItem
      routerLink={game.software_used ? `/games/id/${game.steam_appid}` : '/games'}
      key={game.steam_appid}
      tab="games" // 添加这一行
    >
      <IonThumbnail slot="start">
        <img alt={game.name} src={game.header_image} />
      </IonThumbnail>
      <IonLabel>
        <h2>{game.name}</h2>
        <p>{game.developer}</p>
      </IonLabel>
    </IonItem>
  ))}
</IonList>

方案二:使用useNavigate钩子手动处理跳转

改用React Router的useNavigate钩子替代routerLink,手动控制路由跳转逻辑:

  1. 在GameListPage.tsx中导入useNavigate:
import { useNavigate } from 'react-router-dom';
  1. 初始化导航函数并替换routerLink为onClick事件:
const GameListPage = () => {
  const navigate = useNavigate(); // 初始化导航函数

  return (
    <IonList>
      {gamesJson.map((game) => (
        <IonItem
          onClick={() => {
            // 手动处理跳转逻辑
            game.software_used 
              ? navigate(`/games/id/${game.steam_appid}`) 
              : navigate('/games');
          }}
          key={game.steam_appid}
          tappable // 添加点击反馈效果
        >
          <IonThumbnail slot="start">
            <img alt={game.name} src={game.header_image} />
          </IonThumbnail>
          <IonLabel>
            <h2>{game.name}</h2>
            <p>{game.developer}</p>
          </IonLabel>
        </IonItem>
      ))}
    </IonList>
  );
};

说明

两种方案都能解决路由跳转后页面不即时更新的问题,方案一更贴合Ionic的组件特性,方案二则更灵活,适合复杂的跳转逻辑场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:13:09