下一个js路由触发器useEffect

时间:2020-02-16 19:42:36

标签: reactjs next.js

我正在尝试使用axios在useEffect中获取数据,但每次更改页面时它都会获取数据。有没有一种方法可以在更改页面时不触发useEffect?我尝试使用披肩推式推杆,但没有用。我无法在服务器端获取数据,因为我在axios拦截器中使用了next / router。

   import { useRouter } from 'next/router';
   const router = useRouter();
   router.push('/', '/', { shallow: true })

使用上面的代码,它将在切换路由时触发useEffect。

  useEffect(() => {
    fetch.get('/endpoint').then(response => {
     // do stuff
    });
  }, []);

3 个答案:

答案 0 :(得分:1)

如果useEffect中有一些东西只想运行一次,请添加一个空数组作为依赖项数组。

示例:

  useEffect(() => {
      // your axios fetch here
  }, []);

空数组作为依赖项,意味着效果只运行一次。如果不指定依赖项,则效果将在每次渲染后运行。

答案 1 :(得分:1)

尝试:

useEffect(() => {
    fetch.get('/endpoint').then(response => {
     // do stuff
    });
}, []); // the empty array will call useEffect only for first time while loading the component

引用:https://reactjs.org/docs/hooks-effect.html#tip-optimizing-performance-by-skipping-effects请参见注释

答案 2 :(得分:0)

浅路由仅适用于同一页面。参见this
如果您坚持使用浅路由,则必须使用dynamic-routes将页面聚合为一页。

所以我认为最好在useEffect中使用一些缓存策略。