Reactjs Apollo消费者VS导入客户端

Reactjs Apollo消费者VS导入客户端,reactjs,apollo-client,Reactjs,Apollo Client,为什么我应该使用ApolloConsumer而不是直接导入模块中的客户端 从文档中,我应该做如下操作: //模块index.jsx 从“A”导入客户端; ReactDOM.render( , document.getElementById('root'); //任何其他不使用查询或变异的组件 常量其他=()=>( { 客户=>{ //使用客户端 } } ); 但为什么不直接导入客户机而不导入客户机呢? //模块OtherBis 从“A”导入客户端; 常量AltOther()=>{ //

为什么我应该使用ApolloConsumer而不是直接导入模块中的客户端

从文档中,我应该做如下操作:

//模块index.jsx
从“A”导入客户端;
ReactDOM.render(
, 
document.getElementById('root');
//任何其他不使用查询或变异的组件
常量其他=()=>(
{
客户=>{
//使用客户端
}
}
);
但为什么不直接导入客户机而不导入客户机呢?

//模块OtherBis
从“A”导入客户端;
常量AltOther()=>{
//和客户做点什么
返回;
};

在我看来,
组件是为支持
JSX
而创建的,就像
继电器的
反应继电器
一样。这是没有必要的。事实上,我从未使用过
ApolloConsumer
。此外,还有一些钩子(例如,
useQuery
useMutation
useSubscription
)可以做任何事情。他们只是制造工具。是否使用它取决于您。

在我看来,
组件是为支持
JSX
而创建的,就像
react relay
relay
创建的一样。这是没有必要的。事实上,我从未使用过
ApolloConsumer
。此外,还有一些钩子(例如,
useQuery
useMutation
useSubscription
)可以做任何事情。他们只是制造工具。是否使用它取决于您。

可能与您不应该直接导入
存储
的原因相同:

类似地,虽然可以通过直接导入来引用应用商店实例,但在Redux中不推荐使用这种模式。如果您创建一个存储实例并将其从模块导出,它将成为一个单例。这意味着,如果有必要,将Redux应用程序隔离为更大应用程序的组件,或者启用服务器呈现将更加困难,因为您希望在服务器上为每个请求创建单独的存储实例


可能与您不应直接导入
存储
的原因相同:

类似地,虽然可以通过直接导入来引用应用商店实例,但在Redux中不推荐使用这种模式。如果您创建一个存储实例并将其从模块导出,它将成为一个单例。这意味着,如果有必要,将Redux应用程序隔离为更大应用程序的组件,或者启用服务器呈现将更加困难,因为您希望在服务器上为每个请求创建单独的存储实例


我没有使用SSR,我正在做一个单人水疗所以我应该没事吧?另外,创建一个客户端并将其传递给应用程序组件不是一个单独的启动吗?@yVan是的,是的。在SSR场景中,导入
createStore
函数而不是
store
,并为每个请求运行该函数,以便每个请求都有自己的
store
。我没有使用SSR,我正在处理一个单独的SPA,所以我应该没事吧?另外,创建一个客户端并将其传递给应用程序组件不是一个单独的启动吗?@yVan是的,是的。在SSR场景中,导入
createStore
函数而不是
store
,并为每个请求运行该函数,以便每个请求都获得自己的
store
// Module A.js initiate client
const client = new ApolloClient({
  // init cache, links, typeDefs...
});
export default client;
// Module OtherBis
import client from 'A';

const AltOther () => {
  // do something with client
  return <div></div>;
};