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