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

如何在跳转新页面时保留用户的搜索输入内容?

解决页面跳转后搜索输入值丢失的方案

下面提供几种实用的实现方案,按需选择即可:

方案一:通过URL查询参数传递搜索值

跳转时将搜索值拼入URL参数,新页面从URL中读取并填充输入框,这种方式还能支持页面刷新后保留搜索值。

修改你的跳转逻辑:

let navigate = useNavigate(); 
const routeChange = () =>{ 
  // 用encodeURIComponent处理特殊字符,避免URL解析异常
  let path = `/ProductsNew?search=${encodeURIComponent(innerSearch)}`; 
  navigate(path);
}

const wrapperFunction = () => {
  routeChange();
  props.onSubmit(innerSearch)
}

在ProductsNew页面读取参数:

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

const ProductsNew = () => {
  const [searchParams] = useSearchParams();
  // 从URL中获取搜索值,无值时设为空字符串
  const [searchInput, setSearchInput] = useState(searchParams.get('search') || '');
  
  return (
    <input 
      type="text" 
      value={searchInput} 
      onChange={(e) => setSearchInput(e.target.value)}
    />
  );
}

方案二:用localStorage/sessionStorage临时存储

跳转前把搜索值存入本地存储,新页面加载时读取,适合不需要在URL中暴露搜索内容的场景。

修改跳转函数:

const routeChange = () =>{ 
  // sessionStorage会在标签页关闭后清空,localStorage长期保存,按需选择
  sessionStorage.setItem('tempSearchKeyword', innerSearch);
  let path = `/ProductsNew`; 
  navigate(path);
}

在ProductsNew页面读取:

const ProductsNew = () => {
  const [searchInput, setSearchInput] = useState('');

  useEffect(() => {
    const savedSearch = sessionStorage.getItem('tempSearchKeyword');
    if (savedSearch) {
      setSearchInput(savedSearch);
      // 可选:读取后清除存储,避免下次进入页面自动填充旧值
      sessionStorage.removeItem('tempSearchKeyword');
    }
  }, []);
  
  return (
    <input 
      type="text" 
      value={searchInput} 
      onChange={(e) => setSearchInput(e.target.value)}
    />
  );
}

方案三:通过全局状态管理(Context/Redux)存储

如果项目已经使用全局状态管理,可以把搜索值存在全局state中,跨页面直接读取。这里以React Context为例:

  1. 创建搜索上下文:
import { createContext, useContext, useState } from 'react';

const SearchContext = createContext();

export const SearchProvider = ({ children }) => {
  const [globalSearchValue, setGlobalSearchValue] = useState('');
  
  return (
    <SearchContext.Provider value={{ globalSearchValue, setGlobalSearchValue }}>
      {children}
    </SearchContext.Provider>
  );
}

export const useSearch = () => useContext(SearchContext);
  1. 在跳转页面设置全局搜索值:
import { useSearch } from './SearchContext';

// ...
const { setGlobalSearchValue } = useSearch();

const routeChange = () =>{ 
  setGlobalSearchValue(innerSearch);
  let path = `/ProductsNew`; 
  navigate(path);
}
  1. 在ProductsNew页面读取全局值:
import { useSearch } from './SearchContext';

const ProductsNew = () => {
  const { globalSearchValue } = useSearch();
  const [searchInput, setSearchInput] = useState(globalSearchValue);
  
  return (
    <input 
      type="text" 
      value={searchInput} 
      onChange={(e) => setSearchInput(e.target.value)}
    />
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:46:14