reactjs - 刷新页面时 Gatsby 链接状态丢失
问题描述
我正在使用Gatsby 提供state
的组件中的道具发送状态数据。Link
<Link
to={`/photos`}
state={{ photoData }}
>
View Photo
</Link>
当我单击View Photo
链接时,它会转到photos
页面,我可以photoData
从props.location.state
. 问题是当我刷新页面时,它photoData
被清除了。development
这在该模式下效果很好,因此photoData
即使在我刷新photos
页面后仍然存在。production
但它在模式下不起作用。我正在考虑将数据存储到 redux 存储,但这太过分了。
有什么想法可以解决这个问题吗?
解决方案
我遇到了同样的问题,最后我使用了一个将状态保存在本地存储中的钩子。我不知道你是否使用钩子,但假设你是这应该解决你的问题:
import { useEffect, useState } from 'react';
export const usePersistState = (key: string | any, defaultValue: string | boolean | any) => {
const [value, setValue] = useState(() => {
if (typeof window !== 'undefined') {
const persistedState = window.localStorage.getItem(key);
return persistedState !== null ? JSON.parse(persistedState) : defaultValue;
}
});
useEffect(() => {
window.localStorage.setItem(key, JSON.stringify(value));
}, [key, value]);
return [value, setValue];
};
这会根据 localStorage 项目设置您的状态,因此它应该有一个布尔值。然后将其导入到您的组件中,并像使用useState
.
import { usePersistState } from 'hooks/use-persist-state';
const [state, setState] = usePersistState('localStorageKey', localStorageValue);
我用它来保存我从 API 调用的数据,并显示/隐藏 cookie 同意横幅,所以它有很多用途。快乐的编码,希望这能解决你的问题!
推荐阅读
- ios - 使用动画在 indexPath 处移动行
- tooltip - SwiftUI:如何在悬停时显示工具提示/提示?
- pandas - xlwings/COM API 格式表
- python - Scrapy、Selenium、jQuery Dropdown 与具有 style="display: none;" 的选择标签的行为不一致
- c - 泛型交换 c 函数
- sql-server - 创建内存优化表类型
- r - 如何在 R 中运行 ComBat 函数时解决“dim(X) must have a positive length”
- python-3.x - ImportError:没有使用 MAC VSCODE 的模块命名烧瓶
- python - 基于其他两列的唯一元素(分组)的一列的 Numpy 平均值
- reactjs - React + typescript:propTypes.elementType 的 InferProps 抛出错误:JSX 元素类型“组件”没有任何构造或调用签名