React 中嵌套 ApolloProvider

Bar*_*uch 4 apollo reactjs react-apollo react-gql

我正在开发一个微前端应用程序。我们正在构建一个库来管理所有用户数据、权限、角色等。

<ApolloProvider client={userManagementClient}>
  {children}
</ApolloProvider>
Run Code Online (Sandbox Code Playgroud)

这将在许多应用程序中使用,它看起来像这样:

<ApolloProvider client={appClient}>
  <UserManagementProvider><App /></UserManagementProvider>
</ApolloProvider>
Run Code Online (Sandbox Code Playgroud)

问题是应用程序的 ApolloProvider 不起作用,因为查询是针对图书馆的数据源而不是应用程序进行的。

有谁知道嵌套或多个 ApolloProvider 的方法吗?

Bar*_*uch 8

对于任何有兴趣的人:

每个应用程序只允许有一个提供程序,无论该提供程序是从何处获取的。您可以做的是定义要用于查询、突变、订阅的客户端:

const link = ApolloLink.from([ /* ... */ ]);

const apolloClient = new ApolloClient({ link, cache: new InMemoryCache() });

const status = useQuery<GetUserQuery>(
  userQuery,
  {
    variables: {
      email
    },
    client: apolloClient, // <<--
  }
);
Run Code Online (Sandbox Code Playgroud)

  • 我想知道这对你来说效果如何。我们正在做类似的事情。您的解决方案是在应用程序树顶部的“ApolloProvider”中设置初始客户端,然后使用不同的“uris”为子组件实例化新的“ApolloClient”实例吗? (2认同)