Apollo客户端状态预设缓存在服务器端渲染上不起作用。
创始人
2024-09-09 12:00:58
0

在 Apollo 客户端中,状态预设缓存在服务器端渲染(SSR)上可能不起作用,这是因为在服务器端渲染时,Apollo 客户端无法直接访问客户端浏览器中存储的状态。

解决这个问题的一种常见方法是使用 getDataFromTree 方法。getDataFromTree 可以在服务器端渲染前执行 GraphQL 查询,然后将查询结果注入到 Apollo 客户端的状态中。

下面是一个示例代码:

import { ApolloProvider, getDataFromTree } from '@apollo/client';
import { ApolloClient, InMemoryCache } from '@apollo/client';
import { renderToString } from 'react-dom/server';
import App from './App';

// 创建 Apollo 客户端
const client = new ApolloClient({
  uri: 'http://localhost:4000/graphql',
  cache: new InMemoryCache(),
});

// 服务器端渲染函数
async function renderApp(req, res) {
  const app = (
    
      
    
  );

  // 在服务器端渲染前执行查询
  await getDataFromTree(app);

  // 渲染 React 应用为 HTML 字符串
  const html = renderToString(app);

  // 将 HTML 字符串发送给客户端
  res.send(`
    
    
      
        Apollo SSR Example
      
      
        
${html}
`); } // 启动服务器 app.get('/', renderApp);

在上面的示例中,我们使用 getDataFromTree 方法在服务器端渲染前执行查询,并将查询结果通过 window.__APOLLO_STATE__ 注入到 Apollo 客户端的状态中。然后,我们将整个 React 应用渲染为 HTML 字符串,并将该 HTML 字符串发送给客户端。

在客户端代码中,我们可以使用 ApolloClienthydrate 方法将服务器端注入的状态与客户端状态进行合并:

import { ApolloClient, ApolloProvider, InMemoryCache } from '@apollo/client';
import ReactDOM from 'react-dom';
import App from './App';

// 创建 Apollo 客户端
const client = new ApolloClient({
  uri: 'http://localhost:4000/graphql',
  cache: new InMemoryCache(),
});

// 合并服务器端注入的状态与客户端状态
client.hydrate();

// 渲染 React 应用
ReactDOM.render(
  
    
  ,
  document.getElementById('root')
);

通过以上的代码示例,我们可以解决在服务器端渲染中 Apollo 客户端状态预设缓存不起作用的问题。

相关内容

热门资讯

往昔有开挂"微玩盒子... 往昔有开挂"微玩盒子网页游戏辅助"详细开挂辅助工具有挂秘笈(玩家教你) 【无需打开直接搜索加薇136...
从来有辅助"九哥玩挂... 较多好评“微乐万能挂官网”开挂(透视)辅助教程 了解更多开挂安装加(136704302)微信号是一款...
窍要开挂"菠萝德普辅... 菠萝德普辅助器免费版在哪里 无需打开直接搜索微信:136704302本司针对手游进行,选择我们的四大...
透视免费!友间联盟辅助,新世界... 友间联盟辅助 无需打开直接搜索微信:136704302本司针对手游进行,选择我们的四大理由: 1、软...
原本有开挂"情怀国粹... 原本有开挂"情怀国粹辅助"详细开挂辅助平台有挂猫腻(技巧教程) >>您好:软件加薇136704302...
固有有辅助"中至吉安... 固有有辅助"中至吉安黑科技"开挂(透视)辅助安装(玩家教程有挂辅助) 【无需打开直接搜索加薇1367...
阶段开挂"人海大厅脚... 阶段开挂"人海大厅脚本"开挂(软件)辅助软件(有挂分享);无需打开直接搜索加薇136704302(咨...
透视实锤!闲逸碰胡辅助软件下载... 大家好,今天小编来为大家解答微乐自建房脚本免费下载苹果版这个问题咨询软件客服可以免费测试直接加微信(...
本来有开挂"小闲川南... 本来有开挂"小闲川南辅助工具"详细开挂辅助平台有挂实锤(微扑克教程) 了解更多开挂安装加(13670...
固有有开挂"丽水双扣... 丽水双扣茶苑脚本是一款专注玩家量身打造的游戏记牌类型软件,在丽水双扣茶苑脚本这款游戏中我们可以记录下...