订阅在 React Native 中不起作用?
Posted
技术标签:
【中文标题】订阅在 React Native 中不起作用?【英文标题】:Subscription not working in React Native? 【发布时间】:2020-09-29 22:22:13 【问题描述】:我需要将subscription
集成到我的ReactNative
应用程序中。 subscription
在localhost
在graphiql
上工作正常。我已经在Heroku
上部署了我的后端。我使用的是apollo-server
而不是hasura
。我的订阅不适用于 Heroku 提供的 url,但它在 localhost 上运行良好。查询和突变对 localhost 和 Heroku url 都有效。所以我试图从我的ReactNative
客户端访问我的订阅。我将基本网址保留为我的本地主机。查询和突变部分适用于我的 ReactNative
客户端,但我的订阅部分不起作用。
我已经通过添加这个配置了我的 Apollo 客户端以进行订阅
const httpLink = createHttpLink(
uri: 'http://localhost:5000',
);
const wsLink = new WebSocketLink(
uri: `ws://localhost:5000`,
options:
reconnect: true,
connectionParams:
// headers:
// Authorization: `Bearer $token`,
// ,
,
,
);
const authLink = setContext(async (req, headers) =>
try
const token = await AsyncStorage.getItem('token');
return
headers:
...headers,
authorization: token ? `Bearer $token` : '',
,
;
catch (e)
console.log(e);
);
const link = split(
(query) =>
const kind, operation = getMainDefinition(query);
return kind === 'OperationDefinition' && operation === 'subscription';
,
wsLink,
authLink.concat(httpLink),
);
const client = new ApolloClient(
link: link,
cache: new InMemoryCache(),
);
这是我的useSubscription
钩子
const data, error, loading = useSubscription(
HEALTH_CONSULTATION_SUBSCRIPTION,
);
我既没有收到错误也没有收到数据。
我正在从Graphiql
触发subscription
【问题讨论】:
是您尝试连接 wss 还是 https 的 url?如果它是域而不是本地主机,则必须为 ios 和 android 添加安全传输异常:***.com/questions/30731785/… @DanielDimitrov 我已在 info plist 文件中为 iOS 添加了它。我已经尝试过 https 和 localhost 但不起作用。我尝试用 ws 替换 https ,仍然无法正常工作。还有它的 ws 而不是。我的突变和查询也在工作,所以它不是运输问题 那么您在控制台中得到的确切错误是什么? @DanielDimitrov 我什么都没看到没有失败没有成功 你在看哪里?您是否在网络检查中看到请求调度?你得到回应了吗?也许删除 try/catch 块,看看你是否会得到一个错误。 【参考方案1】:所以我的React Native
代码没有问题。问题在于我正在使用的 Heroku 免费层。我尝试用Hasura's Subscription
https://hasura.io/learn/graphql/graphiql?tutorial=react-native
替换我的subscription
并且它有效。
【讨论】:
以上是关于订阅在 React Native 中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
setParams 在 react-native 中不起作用
全局变量在 React Native 中不起作用 - Expo
Animated.View 在 React Native 中不起作用