react-router-dom v6中useSearchParams更新函数的state参数是什么?
关于react-router-dom v6中useSearchParams的setSearch第二个参数state的说明
首先明确:你用到的setSearch第二个参数里的state,本质是路由状态(Route State),它不属于URL搜索参数的范畴,是React Router导航时附带的隐式状态。
为什么找不到专门的文档说明?
useSearchParams的更新函数(setSearch)复用了React Router中navigate函数的选项参数,所以官方文档会把这部分统一放在navigate的参数说明里,不会单独在useSearchParams的文档下重复赘述。
这个state的具体作用
- 它存储在浏览器的会话历史(session history)中,不会出现在URL地址栏,适合存放不想暴露的临时数据。
- 结合你的代码:你已经把
filters序列化为transFilters存在搜索参数里,同时把原始filters对象存入state,这样后续可以通过useLocation().state直接拿到原始对象,省去了解析JSON的步骤;而URL里的transFilters则保证页面刷新后,你还能通过解析它恢复筛选状态。
使用注意事项
- 路由状态是会话级的,页面刷新后会丢失,如果需要持久化得自己处理(比如存localStorage)。
- 不要存储过大的数据,不同浏览器对history state的存储上限有要求,超出会导致报错。
- 如果不想新增历史记录,而是替换当前条目,可以在参数里加
replace: true,比如:setSearch( { ...Object.fromEntries(search), transFilters: JSON.stringify(filters) }, { state: filters, replace: true } );
内容的提问来源于stack exchange,提问作者Sky
相关产品推荐
相关产品推荐

