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

useParams Hook 在组件多次渲染间是否返回持久化对象?

useParams返回对象的持久化说明

React Router的useParams Hook在URL参数未变化时,多次渲染间会返回同一个对象引用。

  • 只要URL里的参数(比如你代码中的bookId)没改动,useParams返回的对象就不会重新创建,引用保持一致,所以把bookId放进useMemo的依赖数组是完全安全的。
  • 只有当URL参数发生变化时,useParams才会返回新的对象,此时bookId的值更新,useMemo才会触发重新计算。

针对你给出的代码:

const { books, setBooks } = useContext(BooksContext);
const { bookId = 0 } = useParams();

const selectedBook = useMemo(
  () => books.find(book => book.id === +bookId) || null,
  [books, bookId],
);

这个写法完全符合需求:

  • 当books数组更新时,会重新查找选中的书籍;
  • 当bookId(URL参数)变化时,也会重新查找;
  • 若两者都无变化,useMemo会直接复用之前缓存的selectedBook,不会重复执行find操作,满足“除非参数变化否则不重新定义选中书籍”的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:52:34