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