与我们一起于10月8日至10日抵达纽约市,了解关于GraphQL联邦和API平台工程的最新的技巧、趋势和新闻。参加2024年纽约市的GraphQL峰会
文档
免费开始

与 React Native 集成


您可以使用与 React Native 的方式安装它与 React.js。安装方式如下:npm

npm install @apollo/client graphql

然后在 ApolloProvider 组件中包装您的应用程序,如下所示:

import React from 'react';
import { AppRegistry } from 'react-native';
import { ApolloClient, InMemoryCache, ApolloProvider } from '@apollo/client';
// Initialize Apollo Client
const client = new ApolloClient({
uri: 'https://127.0.0.1:4000/graphql',
cache: new InMemoryCache()
});
const App = () => (
<ApolloProvider client={client}>
<MyRootComponent />
</ApolloProvider>
);
AppRegistry.registerComponent('MyApplication', () => App);

关于 setup Apollo Client 的更多信息,请参阅入门

示例应用程序

此示例应用程序GraphQL指南维护,使用 React Native 和 Apollo Client。

Apollo 客户端开发者工具

1. 使用React Native Debugger

React Native Debugger 支持Apollo 客户端开发者工具

  1. 安装 React Native Debugger 并打开它。
  2. 在您的应用程序中启用“远程调试 JS”。
  3. 如果您看不到开发者工具面板或 Apollo 标签缺失,请右键单击任何位置并选择切换开发者工具

2. 使用Flipper

名为React Native Apollo devtools的社区插件在 Flipper 中可用,支持查看缓存数据。

  1. 安装 Flipper 并打开它。

  2. 前往添加插件并搜索react-native-apollo-devtools并安装

  3. react-native-flipperreact-native-apollo-devtools-client添加为react native应用的开发依赖。

  4. 在客户端使用flipper初始化插件

    import { apolloDevToolsInit } from 'react-native-apollo-devtools-client';
    const client = new ApolloClient({
    // ...
    });
    if (__DEV__) {
    apolloDevToolsInit(client);
    }

通过文本流处理多部分HTTP

默认情况下,React Native自带基于XHR构建的fetch实现,不支持文本流。

因此,如果您正在使用以下中的任意一项:@defer通过多部分HTTP的订阅——这些功能使用文本流来读取多部分HTTP响应——您需要采取额外的步骤来实现这一功能。

  1. 安装react-native-fetch-apireact-native-polyfill-globals并将他们都作为依赖保存。
  2. 在您应用的主入口处(例如index.js, App.js或类似文件),导入以下三个polyfill并在任何应用代码之前调用每个polyfill*函数:
import { polyfill as polyfillEncoding } from "react-native-polyfill-globals/src/encoding";
import { polyfill as polyfillReadableStream } from "react-native-polyfill-globals/src/readable-stream";
import { polyfill as polyfillFetch } from "react-native-polyfill-globals/src/fetch";
polyfillReadableStream();
polyfillEncoding();
polyfillFetch();
  1. 最后,我们需要传递给我们的polyfill'd的fetch一个特殊选项。创建一个HttpLink以便我们可以在我们默认的fetchOptions中设置以下内容:
const link = new HttpLink({
uri: "https://127.0.0.1:4000/graphql",
fetchOptions: {
reactNative: { textStreaming: true },
},
});

注意:如果在添加上述polyfill后Android上仍存在问题,可能存在像Flipper这样的库在本地开发期间拦截请求。尝试在android/app/src/debug/java/com/<projectname>/ReactNativeFlipper.java中注释掉NetworkFlipperPlugin或以发布模式运行您的应用程序。

现在您已准备好在React Native应用中使用@defer和/或多部分在HTTP中!

故障排除

  • 未捕获错误:无法读取'prototype'的属性或从@apollo/client导入时出现的类似Metro构建错误

这是由于 Metro 打包器支持 .cjs.mjs 文件的方式,它需要额外的配置来隐式解析这些扩展名的文件: 需要额外的配置才能隐式解析这些扩展名的文件,因此隐式解析具有这些扩展名的文件时,将导致错误。import { ApolloClient, InMemoryCache } from '@apollo/client'将引发错误。您可以修改导入语句,例如import { ApolloClient, InMemoryCache } from '@apollo/client/main.cjs',或者您可以安装@expo/metro-config并在项目根目录的metro.config.js中进行配置:

metro.config.js
const { getDefaultConfig } = require('@expo/metro-config');
const config = getDefaultConfig(__dirname);
config.resolver.sourceExts.push(
'cjs'
);
module.exports = config;
上一页
在视图层中使用 Apollo 客户端
下一页
使用 Webpack 加载查询
评分文章评分在 GitHub 上编辑编辑论坛Discord

©2024Apollo Graph 兴业公司,交易名称为 Apollo GraphQL。

隐私政策

公司