React路径不变location.search参数改变不触发useEffect
2024-09-02
43
React项目里有两个菜单项会到同一个pathname但是参数不同,这两个页面切换时不会触发页面数据刷新(切换url页面代码不会重新执行)。原来的做法是用window.location.search获取参数,在别的地方都没有问题,这里比较特殊,因为是相同路径的页面跳转。
const currDirection = new URLSearchParams(window.location.search).get("direction");
console.log(currDirection);
useEffect(()=>{
// to do
},[window.location.search或者direction]);
即使把window.location.search放在useEffect数组里,在从path?direction=1切换到path?direction=2时页面不会刷新。切换时根本执行到获取参数打印log。
解决办法是
import { useLocation } from "react-router-dom";
const location = useLocation();
const currDirection = new URLSearchParams(location.search).get("direction");
console.log(currDirection);
useEffect(()=>{
// to do
},[direction])
这样url参数变化时会触发useEffect,也就是参数变化时会执行获取参数的代码,并且触发useEffect。
虽然两个location对象用法类似,但是测试下来,只要调用过useLocation(),那么url变化时页面代码会重新执行,否则不会执行没有任何log。所以像下面这样也没有问题,只跟是否调用useLocation()有关。
const location = useLocation(); // 只声明,并未使用
const currDirection = new URLSearchParams(window.location.search).get(
"direction"
);
console.log(currDirection);
useEffect(()=>{
// to do
},[window.location.search,currDirection或者direction]); // 页面代码重新执行并且触发useEffect
更新于:2个月前赞一波!
相关文章
- react使用echart图文教程
- 国外流行的前端框架有哪些?
- react前端基础面试题和答案
- 在IIS部署React前端项目
- React Error: Exceeded timeout of 5000 ms for a test. 错误
- React @testing-library UserEvent.paste用法更新到14版本后不生效
- @testing-library/react单元测试getBy queryBy和findBy的区别
- React获取url参数的几种方法
- react监听路由变化
- Vue和React怎么选?
- react hooks获取url参数
- react单元测试模拟点击浏览器返回按钮时触发popstate事件
- react基础面试问题
- react获取url参数 忽略参数名大小写
- react获取url参数不区分大小写
- 如何在React中使用路由?
- 如何在 React 中使用 GraphQL
- 前端学react还是vue?
- 如何在React中使用Redux?
- 如何在React使用TypeScript?
文章评论
评论问答