state - 强制 Gatsby 预取链接页面
问题描述
在我的应用程序中,我将状态存储在一个全局对象中(类似于,但不是 Redux)。当用户浏览网站时,我希望这种状态持续存在。Gatsby 智能地尝试为它在页面上找到的链接预取页面内容,但有时当导航到特定路线时,页面从服务器获取,窗口重新加载,我失去了我的状态。
更多上下文:我已经Link
为应用程序中的每个链接使用了 Gatsby 组件,如果需要以编程方式更改路由,我正在使用 Gatsbynavigate
函数。我尝试将状态存储在 中location.state
,但如果页面未预取,这也会被擦除。
有什么方法可以强制 Gatsby 预取路由,这样我就不会丢失我的应用程序状态?
更新:
添加我的代码片段gatsby-ssr.js
以防万一可能相关:
// gatsby-ssr.js
import React from "react";
import wrapWithState from "@state/wrapWithState"; <-- this is a React context provider
import { SearchConfig } from "@modules/search/index";
import { DefaultLayout, HeaderWrap, Lang } from "@layout";
export const wrapRootElement = wrapWithState;
export const wrapPageElement = ({ element, props }) => {
const { location } = props;
return (
<>
<Lang currentPath={location.href} />
<SearchConfig />
<HeaderWrap currentPath={location.href} />
<DefaultLayout {...props}>{element}</DefaultLayout>
</>
);
};
解决方案
真的很简单。如果链接不是使用Link
组件生成的,它的行为就像一个普通的锚点,浏览器将执行页面加载(重置你的状态)。首先确定哪些链接的行为类似于常规链接,并查看为什么Link
不在那里使用组件。
推荐阅读
- c - 在C中按块重新分配char数组(字符串)
- python - 如何将名称文件引用为稍后在程序中打开的变量
- python - 为我的笔记本电脑添加电池管理功能
- javascript - 如何获取内容脚本来访问 chrome storage api
- angular - 无效的 CORS 请求:403 Forbidden Error Angular
- javascript - javascript中数组的长度是如何决定的?为什么这段代码中数组对象 person 的长度是 1?
- javascript - 如何使用需要回调函数作为查询参数的 API
- python - 在处理类/实例时需要帮助:我的类是“不可调用的”
- python - matplotlib 图例:散点图颜色不是我所期望的
- javascript - Puppeteer 如何检查页面上是否存在类