如何解决如何在Apollo graphql reactjs中使用详细查询?
假设data
-是来自父查询的数据。
儿童react-component:
const ShowDetails = ({data}) => {
const { loading,error,data_details } = useQuery(someQueryAsksAdditionalFileldsForEntryAlreadyPresentInCache);
}
someQueryAsksAdditionalFileldsForEntryAlreadyPresentInCache
-询问data
中缺少的其他字段。
(!loading && !error)
data_details
将要求提供字段时。
问题:data_details
仅具有请求的字段。
问题:是否可以将父数据与ShowDetails中的合并其他请求字段一起使用,而忽略data_details
?
在Chrome中,借助Apollo devtools,我看到apollo缓存中有一个来自合并的data
和data_details
的条目。
我不想重新获取data
中所有存在的条目。
示例:
父组件查询:
const bookQuery = gql`
query ($bookId: ID!) {
book(id: $bookId) {
id
author
}
}
`
详细信息查询:
const bookEditionsQuery = gql`
query ($bookId: ID!) {
book(id: $bookId) {
id
editions {
publisher
year
}
}
}
`
const bookReviewQuery = gql`
query ($bookId: ID!) {
book(id: $bookId) {
id
review {
user
score
date
}
}
}
`
所有这些查询将在Apollo缓存中填充相同的存储桶:book
和id
。
要实现什么:在React组件BookDetails
中:
具有1个对象,其中:
data.author
data.editions[0].year
data.review[0].user
从逻辑上讲-这是缓存中的一项。
谢谢您的帮助。
解决方法
使用已经获取的[并从父级传递的]数据几乎没有什么可保存的……仅author
...必须获取所有审阅和版本,完全不使用缓存。
...通过review
解析器获取editions
和book
有助于阿波罗缓存保持关系,但还要求API使用其他(“书”)解析器[level]不需要...评论和版本解析器应直接与书号...和fe一起调用可以由单独的<Review />
子组件...或在同一请求中使用相同id参数调用的review
和editions
来使用。
只需在组件中分别使用data
和dataDetails
-避免代码复杂化,使其易于阅读:
const ShowDetails = ({data}) => {
const { loading,error,data:dataDetails } = useQuery(someQueryAsksAdditionalFileldsForEntryAlreadyPresentInCache);
}
if(loading) return "loading...";
return (
<div>
<div>author: {data.author}</div>
{dataDetails.review.map(...
...如果您真的想加入数据
const ShowDetails = ({data}) => {
const [bookData,setBookData] = useState(null);
const { loading,data:dataDetails } = useQuery(someQueryAsksAdditionalFileldsForEntryAlreadyPresentInCache,{
onCompleted: (newData) => {
setBookData( {...data,...newData } );
}
});
if(bookData) return ...
// {bookData.author}
// bookData.review.map(...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。