在我的应用程序中,我有一个带有“已保存搜索”列表的侧边栏和一个应该显示搜索结果的中心区域。每当我单击已保存的搜索链接时,我都想用该搜索的结果更新中心区域。
使用 apollo-react 执行此操作的正确方法是什么?
我试过这个:
// SidebarConnector.js:
const withVideoSearch = graphql(
VIDEO_SEARCH_QUERY,
{
name: 'videoSearchQuery',
props: ({ videoSearchQuery }) => {
return ({
searchVideos: videoSearchQuery.refetch,
});
},
}
);
export default withVideoSearch(Sidebar);
我保存的搜索正在执行一次searchVideos({ query: "some query" })
点击,基于上述内容,正在重新获取VIDEO_SEARCH_QUERY
具有不同变量的查询。这工作正常,调用 graphql 服务器并返回结果就好了。
对于显示我使用的结果列表的主要组件:
export default graphql(VIDEO_SEARCH_QUERY)(ResultList);
最初,主要组件从服务器获取结果,就好像查询是在没有变量的情况下完成的,这很好,正是我想要的。
问题是每次重新获取似乎都会ROOT_QUERY
在阿波罗的商店中创建一个不同的条目,而我的主要组件被“锁定”到没有变量的那个。
这是 apollo 的商店在初始获取和保存的搜索触发的重新获取之一之后的样子:
ROOT_QUERY
searchVideos({"query":"coke"}): [Video]
0:▾Video:arLaecAu5ns
searchVideos({"query":null}): [Video]
0:▾Video:3HXg-oVMA0c
所以我的问题是如何将主组件切换到“当前搜索”或如何在每次刷新时覆盖存储,以便只有一个键,以便主组件正确更新。
为了完整起见,这是我的VIDEO_SEARCH_QUERY
:
export const VIDEO_SEARCH_QUERY = gql`
query searchVideos($query: String) {
searchVideos(query: $query) {
...fVideo
}
}
${fVideo}
`;