订阅在 React Native 中不起作用?

Posted

技术标签:

【中文标题】订阅在 React Native 中不起作用?【英文标题】:Subscription not working in React Native? 【发布时间】:2020-09-29 22:22:13 【问题描述】:

我需要将subscription 集成到我的ReactNative 应用程序中。 subscriptionlocalhostgraphiql 上工作正常。我已经在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?如果它是域而不是本地主机,则必须为 iosandroid 添加安全传输异常:***.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 中不起作用

Gif 在 React Native iOS 中不起作用

全局变量在 React Native 中不起作用 - Expo

Animated.View 在 React Native 中不起作用

React Native textAlign:'justify' 在 RTL 中不起作用

重复本地通知在 react-native-push-notification 中不起作用