问题描述
我将Apollo客户端用于我的React前端,以便能够使用Laravel Lighthouse托管的GraphQL。
正常使用案例是可行的,但是我现在遇到了某些情况,我想在初始页面请求上预取GraphQL结果,而不是让浏览器加载页面然后发送单独的ajax查询
我看到Apollo client同时支持“商店补水”和“服务器端渲染”,但是我在Lighthouse中没有找到有关如何实现此操作的文档。
我认为我的Blade视图需要包含以下内容:
<script>
window.__APOLLO_STATE__ = '{!!$postsGqlResultJson ?? "null" !!}'; // https://www.apollographql.com/docs/react/performance/server-side-rendering/
</script>
那么问题是:如何生成$postsGqlResultJson
?
更新:
假设我在前端:
const POSTS = gql`
query Posts($first: Int,$page: Int) {
posts(first: $first,page: $page,orderBy: { field: CREATED_AT,order: DESC }) {
paginatorInfo {
currentPage
hasMorePages
total
}
data {
id
...
}
}
`;
const options = {
variables: {
first: 100,page: 1,}
};
const { loading,error,data } = useQuery(query,options);
我认为Lighthouse可能会提供与useQuery
等效的PHP函数,在这里我可以以某种方式提供相同的参数(POSTS gql和options对象),并且它将返回JSON字符串。结果数据,如GQL中所述嵌套。
我误会了吗?非常感谢您的帮助。 :-)
解决方法
您描述的Apollo客户端功能似乎是对前端的关注,并假设您正在从Node.js服务器提供前端。
在Lighthouse中没有什么特别的事情-从它的角度来看,查询是作为服务器端呈现的一部分发送还是从客户端发送都无所谓。