javascript - 如何在浏览器中使用后退和前进按钮浏览页面而不丢失 NextJS 中的页面状态?
问题描述
在 NextJS 中返回上一页时(使用浏览器的后退按钮时)如何恢复过去的状态?或者一般来说,当使用浏览器的后退和前进按钮在页面之间来回移动时,如何恢复状态?
我有一个项目,我在网格中展示了很多游戏截图(“游戏截图”类似于 Pinterest 的别针)。为了在从 Sanity 获取数据时没有很长的等待时间,我不会一次获取所有数据然后将其this.props
存储在this.state
.
这是我的情况:
- 使用加载
/game
页面 - 页面从 Sanity 数据库中获取 30 个缩略图,将它们置于状态
this.state.gameshots
并呈现它们 - 用户点击缩略图,网址更改为
/game?gameshotIndex=14
(顺便说一句,这是真正的网址,但它/gameshot/d6fg8a456g
在网址栏中显示) - 当 url 更改时,会显示一个模式窗口,其中包含游戏截图:
this.props.url.query.gameshotIndex && <Modal> ... </Modal>
- 用户点击模式内的标签链接并转到
/tag/d65g4d56gff4g6jfg
- 用户单击浏览器的后退按钮,并收到错误,因为状态
/game
已丢失,因此页面this.state.gameshots
不需要显示模式。如果它们被一次加载并存储在this.props.gameshots
其中,那么你将不得不一次加载所有游戏截图,即使它们有 100000000 个——这意味着巨大的 TTFB 和缓慢的页面加载。
所以我的问题是:如何在浏览器中使用后退和前进按钮浏览页面而不丢失状态?
解决方案
也许你可以使用localStorage.setItem('images', this.state.gameshots)
, 并存储你需要的东西。
当用户回来时,您可以使用localStorage.getItem('images')
获取此数据并显示给用户。这将避免再次请求获取图像。
我希望这能解决你的问题。:D
推荐阅读
- c# - 如何在 CreateLoginAsync() 中实例化一个新的 LoginData 对象而没有错误
- javascript - 手风琴箭头定位在 div 内
- java - Spring 分页和排序存储库 - 自定义转换器 - 找不到能够从类型转换为类型的转换器
- odata - ODATA : 在父子表中过滤
- excel - 从其他工作簿导入日期会出现错误 9
- excel - 更新 Excel Visual Basic 电子表格生成器宏
- git - `git checkout [other-branch] path-to-file` 不会覆盖当前分支上的文件
- ibm-mobilefirst - ios设备注册上的INVALID_CLIENT_ID错误
- swift - 为什么struct在转换为字典时需要符合Hashable和Generic数组
- r - 如何在ggplot中没有异常值的情况下调整箱线图中的y轴大小?