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

ReactJS如何将组件状态变量传递至另一页面的URL路由参数?

实现导航栏搜索参数传递到路由的方案

1. 在Navbar.jsx中添加路由跳转逻辑

先引入react-router的useNavigate钩子实现页面跳转,同时处理搜索提交的触发事件(表单提交或回车均可):

// 导入useNavigate
import { useNavigate } from 'react-router-dom';

const Navbar = () => {
  const [query, setQuery] = useState("");
  const navigate = useNavigate(); // 初始化导航方法

  const handleChange = (e) => {
    setQuery(e.target.value);
  };

  // 处理搜索提交
  const handleSearch = () => {
    if (!query.trim()) return; // 空内容不执行跳转
    // 对query编码,避免特殊字符破坏URL结构
    const encodedQuery = encodeURIComponent(query);
    navigate(`/search/${encodedQuery}`);
  };

  return (
    <div>
      {/* 方式一:表单包裹,支持按钮点击/回车提交 */}
      <form onSubmit={(e) => {
        e.preventDefault();
        handleSearch();
      }}>
        <input 
          value={query} 
          id="query" 
          onChange={handleChange}
          placeholder="搜索电影..."
        />
        <button type="submit">搜索</button>
      </form>

      {/* 方式二:仅监听回车事件(无需按钮时用) */}
      {/*
      <input 
        value={query} 
        id="query" 
        onChange={handleChange}
        placeholder="搜索电影..."
        onKeyPress={(e) => {
          if (e.key === 'Enter') {
            handleSearch();
          }
        }}
      />
      */}
    </div>
  );
};

2. 在Search.jsx中获取路由参数

用react-router的useParams钩子提取URL中的query参数,记得解码还原原始内容:

import { useParams } from 'react-router-dom';

const Search = () => {
  const { query } = useParams();
  // 解码还原原始搜索关键词
  const decodedQuery = decodeURIComponent(query);

  // 后续可使用decodedQuery请求电影数据
  console.log('搜索关键词:', decodedQuery);

  return (
    <div>
      <h1>搜索结果:{decodedQuery}</h1>
      {/* 渲染搜索结果列表 */}
    </div>
  );
};

关键说明

  • 必须用encodeURIComponent和decodeURIComponent处理query:搜索关键词可能包含空格、&、?等特殊字符,直接拼入URL会导致路由解析错误,编码后能保证URL合法性。
  • 路由保持你原有的"/search/:query"配置即可,react-router会自动匹配参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:06:11