在 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 反馈 — 无需本地设置。
此课程中的所有课时
- 在 React 中读取和写入 localStorage
- 将状态与 localStorage 同步
- 处理跨标签页的存储事件
- sessionStorage、IndexedDB 与 API 选择