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

React使用Link跳转同页面不同参数时页面不刷新数据不更新如何解决

问题原因

React Router 对匹配到同一个路由组件的场景默认会复用组件实例,不会触发组件的卸载和重新挂载。你代码中拉取新闻详情的useEffect使用了空依赖数组,只会在组件第一次挂载时执行1次,后续路由参数id变化时不会重新触发接口请求,因此页面数据不会更新。

解决方案

修改拉取新闻详情的useEffect的依赖数组,将id加入依赖即可,只要路由参数id发生变化,就会自动重新执行接口请求拉取对应新的新闻数据:

// 只需要修改这个useEffect的依赖,其他代码不需要动
useEffect(() => {
  async function fetchMyAPI() {
    let news = await onGetNewsById(id);
    setNewsDetail(news);
  }
  fetchMyAPI();
}, [id]); // 把原来的空数组改成[id]

可选补充方案

如果你需要让整个组件在参数变化时强制重新挂载(比如要重置所有内部状态),可以在路由定义处给NewDetails组件绑定和id关联的key:

// 路由配置示例
<Route 
  path="/NewDetails/:id" 
  element={<NewDetails key={window.location.pathname} />} 
/>

这个方案会让id变化时组件完全重渲染,所有state都会重置,你可以根据自己的业务需求选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:24:08