React 函数组件中的多个 useLazyQuery 钩子(Apollo 客户端)

Posted

技术标签:

【中文标题】React 函数组件中的多个 useLazyQuery 钩子(Apollo 客户端)【英文标题】:Multiple useLazyQuery hooks (Apollo Client) in React Function Component 【发布时间】:2021-12-16 08:22:09 【问题描述】:

我正在尝试在我的函数组件中包含两个 Apollo-Client useLazyQuery 挂钩。任何一个都可以单独工作,另一个被注释掉,但是一旦我将两者都包含在内,第二个什么都不做。有什么想法吗?

export default function MainScreen(props) 

  useEffect(() => 
    validateWhenMounting();
  , []);

  const [validateWhenMounting,  loading, error, data ] = useLazyQuery(
    validateSessionToken,
    
      onCompleted: (data) => console.log('data', data),
    ,
  );

  const [validate,  loading: loading2, error: error2, data: data2 ] =
    useLazyQuery(validateSessionTokenWhenSending, 
      onCompleted: (data2) => console.log('data2', data2),
    );


  const handleSendFirstMessage = (selectedCategory, title, messageText) => 
    console.log(selectedCategory, title, messageText);
    validate();
  ;

【问题讨论】:

【参考方案1】:

想通了:在 onCompleted 之后添加键值对 fetchPolicy: 'network-only', 就可以了。似乎否则,由于缓存,没有进行任何查询......

【讨论】:

您也可以尝试使用null 组件来处理复杂的查询 您能详细说明一下吗? 当然,明天会做:)【参考方案2】:

这是我在 cmets 中谈论和提到的模式:

const dummyComponent = () => 
  const [lazyQuery] = useLazyQuery(DUMMY_QUERY, variables: dummyVariable,
   onCompleted: data => // -> some code here, you can also accept an state dispatch function here for manipulating some state outside
   onError: error => // -> you can accept state dispatch function here to manipulate state from outside
 );
  return null;

这也是你有时会需要的一种模式

【讨论】:

酷,谢谢!这会派上用场的,我敢肯定:)

以上是关于React 函数组件中的多个 useLazyQuery 钩子(Apollo 客户端)的主要内容,如果未能解决你的问题,请参考以下文章

React组件的使用

03.React组件基础

React3.组件基础

Array.map 中的 React 功能组件在将函数作为道具传递时总是重新渲染

React学习第三步:组件相关学习,以及事件中this指向问题

在React Form无状态组件和状态完全Root组件之间传递多个输入字段