apollo-client useQuery仅首次渲染执行,后续重渲染不触发求助
解决useQuery随props变化重新调用API的问题
useQuery本身会自动监听variables里的属性变化,一旦变量值改变就会重新发起请求。你的代码里已经传了styleId和styleColor作为变量,但没触发的话,可以从这几个方向排查解决:
确认props是响应式且值真的变了:
首先要保证styleId和styleColor是父组件传递的响应式props,而且每次变化都是真实的值变更——如果是字符串、数字这类基础类型,值变就行;如果是对象/数组,得是新的引用(别直接修改原对象,要返回新对象),因为useQuery是浅比较变量的。手动用useEffect触发refetch:
如果变量确实变了但useQuery没反应,可以拿到refetch方法,在props变化时手动调用:const { data: { translatedProductName } = {}, refetch } = useQuery( getTranslatedProductCopies, { variables: { styleId, styleColor, }, fetchPolicy: "network-only", } ); useEffect(() => { refetch(); }, [styleId, styleColor, refetch]);检查skip配置是否正确:
如果你之前用了skip,得确保它的条件逻辑是对的。比如只有当styleId或styleColor不存在时才跳过,这样当它们从无到有(或者值变化)时,useQuery会自动执行:const shouldSkip = !styleId || !styleColor; const { data: { translatedProductName } = {} } = useQuery( getTranslatedProductCopies, { variables: { styleId, styleColor, }, fetchPolicy: "network-only", skip: shouldSkip, } );
另外你用的fetchPolicy: "network-only"没问题,这个配置只是强制走网络请求,不会影响变量变化触发查询的逻辑。
内容的提问来源于stack exchange,提问作者izengod
相关产品推荐
相关产品推荐

