阿波罗 useSubscription 挂钩不发出新数据
Apollo useSubscription hook not emitting new data
每当添加新的 post 时,我都会创建订阅。订阅在 graphiql
界面上工作正常。
这是我使用 useSubscription
hook
的反应代码
export const SUSCRIBE_POSTS = gql`
{
subscription
posts {
newPost {
body
id
createdAt
}
}
}
`;
const {
loading: suscriptionLoading,
error: subscriptionError,
data: subscriptionData,
} = useSubscription(SUSCRIBE_POSTS);
当我尝试控制台日志 subscriptionData
时,我什么也没得到。当我添加一个 post 它正确地保存在数据库中时,用于获取 post 的 useQuery
挂钩也可以正常工作,但是当我添加一个新的 post 我不查看订阅数据。我在控制台中也看不到任何错误。当我记录 suscriptionLoading
时,我一开始就得到 true。我不确定如何调试它。
客户端设置已根据文档正确完成 https://www.apollographql.com/docs/react/data/subscriptions/
这是代码
const httpLink = createHttpLink({
uri: "http://localhost:4000/",
});
const wsLink = new WebSocketLink({
uri: `ws://localhost:4000/graphql`,
options: {
reconnect: true,
},
});
const authLink = setContext(() => {
const token = localStorage.getItem("jwtToken");
return {
headers: {
Authorization: token ? `Bearer ${token}` : "",
},
};
});
const link = split(
// split based on operation type
({ query }) => {
const definition = getMainDefinition(query);
return (
definition.kind === "OperationDefinition" &&
definition.operation === "subscription"
);
},
wsLink,
authLink.concat(httpLink)
);
const client = new ApolloClient({
link: link,
cache: new InMemoryCache(),
});
export default (
<ApolloProvider client={client}>
<App />
</ApolloProvider>
);
export const SUSCRIBE_POSTS = gql`
subscription
posts {
newPost {
body
id
createdAt
}
}
`;
能不能去掉订阅gql最外面的括号?
每当添加新的 post 时,我都会创建订阅。订阅在 graphiql
界面上工作正常。
这是我使用 useSubscription
hook
export const SUSCRIBE_POSTS = gql`
{
subscription
posts {
newPost {
body
id
createdAt
}
}
}
`;
const {
loading: suscriptionLoading,
error: subscriptionError,
data: subscriptionData,
} = useSubscription(SUSCRIBE_POSTS);
当我尝试控制台日志 subscriptionData
时,我什么也没得到。当我添加一个 post 它正确地保存在数据库中时,用于获取 post 的 useQuery
挂钩也可以正常工作,但是当我添加一个新的 post 我不查看订阅数据。我在控制台中也看不到任何错误。当我记录 suscriptionLoading
时,我一开始就得到 true。我不确定如何调试它。
客户端设置已根据文档正确完成 https://www.apollographql.com/docs/react/data/subscriptions/
这是代码
const httpLink = createHttpLink({
uri: "http://localhost:4000/",
});
const wsLink = new WebSocketLink({
uri: `ws://localhost:4000/graphql`,
options: {
reconnect: true,
},
});
const authLink = setContext(() => {
const token = localStorage.getItem("jwtToken");
return {
headers: {
Authorization: token ? `Bearer ${token}` : "",
},
};
});
const link = split(
// split based on operation type
({ query }) => {
const definition = getMainDefinition(query);
return (
definition.kind === "OperationDefinition" &&
definition.operation === "subscription"
);
},
wsLink,
authLink.concat(httpLink)
);
const client = new ApolloClient({
link: link,
cache: new InMemoryCache(),
});
export default (
<ApolloProvider client={client}>
<App />
</ApolloProvider>
);
export const SUSCRIBE_POSTS = gql`
subscription
posts {
newPost {
body
id
createdAt
}
}
`;
能不能去掉订阅gql最外面的括号?