如何以及在哪里放置该查询,以便我可以通过它进行映射并在标题中显示类别。我是一个新手,所有的阿波罗文档都是用钩子和功能组件制作的,但是我必须用基于类的组件来完成这个任务,我就是弄不明白。
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
}
}
`;
钩子不能与类组件一起工作-但是你可以包装你的类组件,并将钩子结果作为道具传递给类组件:
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} />;
};
};
这被称为高阶分量
其中Component
是要包装的类组件。这样,你可以使用类组件,但仍然可以访问钩子。
你应该像这样导出你的组件:
export default withQueryHOC(YourComponentHere);
在您的组件中,您应该通过this.props
访问loading
,error
和data