0Pricing
React Academy · 课时

在 React 中读取和写入 localStorage

在 React 钩子中安全访问 localStorage,处理 SSR 环境,并序列化复杂状态。

在 React 中读取和写入 localStorage 是 CoddyKit 上的免费 React Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 React Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 React Academy 课程共包含 4 节课。

localStorage 接口

localStorage 是浏览器内置的存储空间,包含四个核心方法:setItem(key, value)、getItem(key)、removeItem(key) 和 clear()。数据会在页面重新加载和浏览器重启后继续保留。

它位于 window 对象上,并按来源划分范围,也就是说,每个域名都有自己独立的存储空间。

它是同步且会阻塞的

每次 localStorage 调用都会在主线程上同步运行。读取或写入大量数据可能会阻塞渲染,使用户界面感觉卡顿。

因此,请让存储的值保持较小,并避免在每次按键或滚动事件发生时都进行写入。

它只能存储字符串

localStorage 只能存储字符串。要存储对象或数组,您必须先使用 JSON.stringify(value) 将其序列化,然后再调用 setItem。

如果直接存储非字符串值,它会被强制转换,因此对象会变成无用的字符串 [object Object]。

带错误处理的解析

读取时,您可以调用 JSON.parse(localStorage.getItem(key)),但如果存储的字符串已损坏或由其他来源写入,解析可能会抛出错误。

请将解析操作放在 try/catch 中,并在出错时使用默认值作为后备,以免错误条目导致组件崩溃。

检查可用性

localStorage 并不总是可用:在服务端渲染期间,window 不存在;某些隐私浏览模式则会在写入时抛出错误。请通过功能检测来保护访问操作。

一种安全的测试方法是使用 try/catch 设置并移除一个临时键;如果抛出错误,则返回 false。

约 5MB 的容量上限

大多数浏览器会将每个源的 localStorage 容量限制在约 5MB。写入时超出该限制会抛出 QuotaExceededError。

因此,localStorage 适合存储少量数据,但不适合存储图像、大型数据集或缓存的应用程序接口响应。

适合存储的数据

适合存储的数据包括少量、非敏感的界面和用户状态:主题偏好、侧边栏折叠状态、上次使用的筛选条件、已关闭的横幅,以及未保存的表单草稿。

这些值应在重新加载后保留,但不需要与服务器往返通信。

不适合存储的数据

请避免存储令牌或密码等机密,因为页面上的任何脚本都能读取 localStorage,使其容易受到 XSS 攻击。也请避免存储大型对象和权威的服务器状态。

敏感的身份验证数据应放在带有 httpOnly 属性的 Cookie 中,规范数据则应放在服务器上。

localStorage 与 sessionStorage

两者提供相同的应用程序接口,但 sessionStorage 的生命周期与标签页绑定,标签页关闭时会被清除,并且不会在标签页之间共享。localStorage 会永久保留,并在同一源的所有标签页之间共享。

对于短期、标签页专属的数据,请选择 sessionStorage;对于长期偏好,请选择 localStorage。

与 Cookie 和 IndexedDB 的对比

Cookie 体积小,并会随每个超文本传输协议请求发送,因此适合身份验证,但将其用于一般数据会浪费带宽。IndexedDB 是一种用于大型结构化数据的异步数据库,容量远超 5MB 上限。

服务器读取的身份验证数据请选择 Cookie,少量客户端偏好请选择 localStorage,大型或复杂数据请选择 IndexedDB。

简单的读写模式

一个最简辅助函数使用 localStorage.setItem(key, JSON.stringify(value)) 写入,并在 JSON.parse(localStorage.getItem(key)) 外围使用受保护的 try/catch 进行读取,失败时返回默认值。

这个小型封装将序列化和错误处理集中在同一个位置。

快速检查

检验您对 localStorage 数据类型的理解。

回顾

您学习了 localStorage 应用程序接口,了解到它是同步的、仅支持字符串且容量约为 5MB,并学会了如何安全解析以及检查其在 SSR 和隐私模式下的可用性。

您还将它与 sessionStorage、Cookie 和 IndexedDB 进行了比较,以便选择合适的存储方案。

常见问题解答

「在 React 中读取和写入 localStorage」课时是免费的吗?

是的 — 「在 React 中读取和写入 localStorage」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 React Academy 课程的其余内容,请升级到 CoddyKit PRO。 React Academy 课程共包含 4 节课。

「在 React 中读取和写入 localStorage」这节课中我会学到什么?

在 React 钩子中安全访问 localStorage,处理 SSR 环境,并序列化复杂状态。 你通过在浏览器中直接运行的动手代码来练习 React Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 React Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 React Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「在 React 中读取和写入 localStorage」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 React Academy 课中编写并运行代码吗?

能。每节 React Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 在 React 中读取和写入 localStorage
  2. 将状态与 localStorage 同步
  3. 处理跨标签页的存储事件
  4. sessionStorage、IndexedDB 与 API 选择
← 返回 React Academy