返回上一个屏幕时执行useQuery()钩子反应本机堆栈导航器

问题描述 投票:0回答:1

我知道React中的固定规则之一是,您不能在功能组件中的方法内部甚至是useEffect钩子之类的其他钩子中执行任何钩子。它必须在组件本身的主体中执行。

因此,今天在使用测验应用程序时,我遇到了这样一种情况:在堆栈导航器上通过一个屏幕之后,我想通过单击后退按钮再次回到该屏幕。但是这一次,我想使用Apollo Client提供的useQuery挂钩,使用来自graphql查询的数据修改上一个屏幕上的信息。

我可以使用道具上的isFocused属性来检测上一个屏幕是否聚焦。如果更改,那么我将使用useQuery再次获取数据。

我可以这样简单地做到这一点:

    React.useEffect(() => {
        //how do I fetch data from here using useQuery if React prohibits me to use useQuery here?
    }, [props.isFocused]);

所以这是我的问题,有没有办法解决?非常感谢您的回复。

reactjs react-native react-navigation
1个回答
0
投票

正如您所说,您不能在其他挂钩或方法中调用挂钩。换句话说,您不能有条件地调用钩子。如果使用useQuery挂钩,则必须准备好在每次重新渲染组件时都运行查询(尽管它会缓存结果,因此您不必担心性能)。

相反,您应该只调用组件内部的useQuery钩子,并仅强制更新组件即可。由于prop isFocused可能已更改,因此它应该已经重新聚焦。如果没有,您可以参考this

© www.soinside.com 2019 - 2024. All rights reserved.