我如何以及在哪里使用来自 Apollo 客户端的数据?

Posted

技术标签:

【中文标题】我如何以及在哪里使用来自 Apollo 客户端的数据?【英文标题】:How and where do I use the data from an Apollo Client? 【发布时间】:2021-12-09 18:05:16 【问题描述】:

我必须如何以及在何处放置该查询,以便我可以映射它并在标题中显示类别。我是个菜鸟,所有的 apollo 文档都是用钩子和功能组件制作的,但是我必须使用基于类的组件来完成这项任务,我就是想不通。

index.js:

const client = new ApolloClient(
    uri: "http://localhost:4000/graphql",
    cache: new InMemoryCache(),
);

ReactDOM.render(
  <ApolloProvider client=client>
    <App />
  </ApolloProvider>,
  document.getElementById("root")
);

App.js:

class App extends Component 
   render() 
     return (
       <>
         <Header />
       </>
     );
    


export default App;

Header.js:

class Header extends Component 
  render() 
    return (
      <header>
        <ul className="nav-list">
           //Display categories here with map in a <li className="nav-item">
        </ul>
     </header>
     )
  

查询我需要的标题元素:

       const QUERY = gql`
         query getCategories 
            categories 
                name
             
         
       `;

【问题讨论】:

【参考方案1】:

钩子不适用于类组件 - 但是你可以包装你的类组件并将钩子结果作为道具传递给类组件:

import React from 'react';
import  useScreenWidth  from '../hooks/useScreenWidth';

export const withQueryHOC = (Component, query) => 
  return (props) => 
    const  loading, error, data  = useQuery(query);

    return <Component loading=loading error=error data=data ...props />;
  ;
;

这被称为Higher-Order Component

其中Component 是您要包装的类组件。这样您就可以使用类组件,但仍然可以访问挂钩。

你应该像这样导出你的组件:

export default withQueryHOC(YourComponentHere);

在您的组件中,您应该通过this.props 访问loadingerrordata

【讨论】:

以上是关于我如何以及在哪里使用来自 Apollo 客户端的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复来自 Apollo 客户端的格式错误的身份验证标头错误

如何在来自客户端的 graphql 查询中添加 hmac?

如何重置 Apollo 客户端的 useMutation 钩子

如何在本地网络上部署带有 apollo 客户端和 apollo-server 后端的 React 应用程序

Apollo GraphQL - 如何将 RxJS 主题用作 Apollo 客户端的变量?

在哪里存储以及如何在客户端维护来自 cosmos db 的延续令牌