Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 反应:如何在同一个钩子中获取初始API和增量订阅?_Reactjs_React Hooks_Urql - Fatal编程技术网

Reactjs 反应:如何在同一个钩子中获取初始API和增量订阅?

Reactjs 反应:如何在同一个钩子中获取初始API和增量订阅?,reactjs,react-hooks,urql,Reactjs,React Hooks,Urql,我正在尝试使用urql作为graphql客户端构建一个聊天应用程序 最初,使用单个graphql查询获取所有当前消息。这是在useFetchInitialMessageshook中完成的 在订阅查询的帮助下,所有增量消息都附加到消息状态。这是在usescribebemessageshook中完成的 有没有一种方法可以将它们组合成一个钩子来处理初始消息的加载以及由于订阅而导致的后续更新 用于获取初始数据的钩子 函数useFetchInitialMessages(channelId){ 常量查询=`

我正在尝试使用urql作为graphql客户端构建一个聊天应用程序

  • 最初,使用单个graphql查询获取所有当前消息。这是在
    useFetchInitialMessages
    hook中完成的
  • 在订阅查询的帮助下,所有增量消息都附加到消息状态。这是在
    usescribebemessages
    hook中完成的
  • 有没有一种方法可以将它们组合成一个钩子来处理初始消息的加载以及由于订阅而导致的后续更新

    用于获取初始数据的钩子

    函数useFetchInitialMessages(channelId){
    常量查询=`
    查询GetMessages($channelId){
    消息(其中:{channelId:{u eq:$channelId}}}){
    身份证件
    内容
    }
    }
    `;
    常量[{fetching,error,data}]=urql.useQuery({
    查询
    变量:{channelId:channelId},
    });
    返回{fetching,error,data};
    }
    
    用于订阅新邮件的挂钩

    函数useSubscribeMessages(channelId,initialMessages){
    const query=`subscription NewMessageSubscription($channelId:String!){
    消息(channelId:$channelId){
    身份证件
    内容
    }
    }
    `;
    const handleNewMessage=(messages=initialMessages,response)=>{
    返回[response.message,…messages];
    };
    常数[res]=useSubscription(
    {query:query,变量:{channelId:channelId}},
    无柄订阅
    );
    返回[res];
    }
    
    组件

    功能消息列表(道具:道具){
    const{channel}=props;
    const{fetching,error,data:initialMessages}=useFetchInitialMessages(
    频道id
    );
    const[res]=useSubscribeMessages(channel.id,initialMessages);
    如果(获取){
    返回“加载…”

    ; } 如果(!res.data){ 返回(
      {initialMessages.map((消息)=>{
    • 消息内容
    • ; })}
    ); } 返回(
      {res.data.map((消息)=>{
    • 消息内容
    • ; })}
    ); }
    不确定为什么不简单地创建组合钩子,只需将上面的两个钩子包装起来就可以获得
    channelId