我正在尝试执行我认为是一项简单的任务 . 我有一个搜索框,成功使用client.writeQuery将项添加到缓存中 . 它看起来像这样:
client.writeQuery({
query: gql`
{
searchQuery {
query
}
}
`,
data: {
searchQuery: {
query: event.target.value,
__typename: 'searchQuery'
}
}
});
这可以正常使用,因为我可以使用Apollo Chrome工具,并在我输入时看到它在缓存中设置和更新 . 这不是我需要保留在数据库中的值 .
我想要做的就是让它被另一个组件读取并在查询中使用它 . 我查看过大量的文档和教程,但对我来说似乎并不简洁或清晰 . 我有另一个组件,它有一个Query组件,它接受该字符串并使用它来搜索 . 我也知道这个工作正常,因为在我使用Apollo Link State之前,我只是让它在React状态下使用一个值 .
如何使用此React组件以与使用React状态相同的方式观察和使用此Apollo缓存值?后续组件看起来像这样:
const MainSearchQuery = ({searchQuery}) => (
<Query query={MAIN_QUERY} variables={{searchQuery}}>
{({loading, error, data}) => {
if (loading) return(
<p>Finding something ...</p>
);
if (error) return (
<p>Ah man! There was nothing to find.</p>
);
return (
<MainSearchResults searchResults={data.ResultsBySubstring} />
);
}}
</Query>
);
调用MAIN_QUERY的Query组件只是将返回的数据传递给负责呈现结果的组件 . 任何帮助都将非常感激,因为我认为这个小问题很容易解决,因为学习Apollo / GraphQL的过程已经停止了 . 谢谢 .
1 回答
在我的MainSearchQuery组件中,我将其切换为ES6类组件,并且我能够使用react-apollo中的compose函数并导出组件,如下所示:
然后在我的内心
然后让我的Query组件采用如下变量:
一切都很顺利 .