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

如何在remix-run/react router中通过router实例携带查询参数导航?

问题描述

我正在使用React Router新数据API中的createBrowserRouter,现有代码如下:

router.tsx

import { createBrowserRouter } from 'react-router-dom';
import { allRoutes } from './allRouts.tsx';
import type { Router } from '@remix-run/router/dist/router';

export const router: Router = createBrowserRouter(allRoutes);

routerAction.tsx

export const routerAction = async ( 
    value: string | number
): Promise<void> => { 
            return router.navigate(value.toString());
    }
};

根据类型文档描述:

A Router instance manages all navigation and data loading/mutations

我想了解如何通过该router实例实现类似useSearchParams的带查询参数的导航?


解决方案

要通过createBrowserRouter生成的Router实例实现带查询参数的导航,你可以用以下两种方式实现,效果和useSearchParams配合导航的逻辑一致:

1. 直接拼接查询参数

如果查询参数结构简单,可直接手动拼接在目标路径后:

export const routerAction = async (value: string | number): Promise<void> => {
  // 示例:跳转至/target路径并携带id、name两个查询参数
  const targetPath = `/target?id=${value.toString()}&name=demo`;
  return router.navigate(targetPath);
};

2. 使用URLSearchParams构建(推荐)

对于多参数或复杂场景,用URLSearchParams构建查询参数更规范,避免手动拼接的格式错误:

export const routerAction = async (value: string | number): Promise<void> => {
  const params = new URLSearchParams();
  params.set("id", value.toString());
  params.set("name", "demo");
  // 生成带结构化查询参数的路径
  const targetPath = `/target?${params.toString()}`;
  return router.navigate(targetPath);
};

额外配置

router.navigate同样支持传入配置项,比如设置replace: true替换当前历史记录,和组件内useNavigate的用法一致:

router.navigate(targetPath, { replace: true });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 14:59:57