我为这个问题准备了一个小演示:
演示
因此,我使用react router dom创建单页应用程序,并创建了两个页面(组件Page1和Page2(之间的标准导航。
问题是,每次我在页面之间切换时,都会调用useEffect钩子(第二个参数是空数组((在演示中,您可以在控制台中看到它(。
我只想为每个组件获取一次数据,然后重用这些数据,不管用户是否会在页面之间切换。是否有可能在不检查useEffect函数内部的某些条件的情况下执行此操作?这让我有点困惑,因为useEffect[]应该只为组件运行一次,而不是这样。
空的deps数组意味着只有在每次安装组件时才会调用useEffect
。每次更改页面时都会调用useEffect
,因为每次都会卸载页面组件,然后在再次访问时重新装载。例如,尝试单击第1页链接两次。它只会记录一次消息,因为页面没有被卸载和重新装载。
您可以尝试通过使用比页面更高级别的useEffect
来解决此问题,该页面将是您的应用程序组件,并在那里调用您的fetch。然而,我不确定用类组件是否可以做到这一点,所以您可能不得不使用函数组件。