如何将数据持久化(转储)到本地存储并在以后的会话中加载?

Joo*_*oon 6 relayjs

我希望从Relay存储中保留一些数据部分,并在以后的会话中再次加载它以获得更好的用户体验.(我正在使用Relay with react native for context).

数据可以相对较大(最多几千条记录),并且不需要与服务器同步100%.我希望跨会话保留记录,因为我不希望每次用户打开应用程序时都重新获取数据.这将是服务器的负担和糟糕的用户体验(加载时间).

小智 1

您可以在设置 Relay 时创建的环境文件中访问 Relay 的完整存储。如果您尝试控制台注销recordSource,您应该会看到整个存储,并且每次 Relay 处理新操作(查询/突变/订阅)时它都应该更新,所以也许您所要做的就是将其存储在持久存储(即 localStorage)中。

例子:

// your-app-name/src/RelayEnvironment.js
import {Environment, Network, RecordSource, Store} from 'relay-runtime';
import fetchGraphQL from './fetchGraphQL';

async function fetchRelay(params, variables) {
  console.log(`fetching query ${params.name} with ${JSON.stringify(variables)}`);
  return fetchGraphQL(params.text, variables);
}

const recordSource = new RecordSource();
console.log(recordSource);
// Store `recordSource` in persisted storage (i.e. localStorage) here.
if(typeof window !== "undefined") { // optional if you're not doing SSR
  window.localStorage.setItem("relayStore", JSON.stringify(recordSource));
}

export default new Environment({
  network: Network.create(fetchRelay),
  store: new Store(recordSource),
});
Run Code Online (Sandbox Code Playgroud)