当前位置: 首页 > news >正文

localStorage用法

一、localStorage API使用

注意,localStorage 只能存储字符串

1.1 存储数据

例如,对象存储时,可以使用JSON.stringify 转成字符串;

// 假设你有一个对象
const myObject = {name: 'Alice',age: 25,
};// 使用 JSON.stringify 将对象转换为字符串
const serializedObject = JSON.stringify(myObject);// 存储到 localStorage
localStorage.setItem('myKey', serializedObject);

1.2 读取数据

读取时,再用JSON.parse 方法将字符串转换回对象。

// 使用 localStorage.getItem 获取存储的字符串
const storedObjectString = localStorage.getItem('myKey');// 如果存在数据,使用 JSON.parse 将字符串转换回对象
const myObject = storedObjectString ? JSON.parse(storedObjectString) : null;// 使用对象
console.log(myObject);

1.3 react中的使用

完整示例
在 React 组件中,你可以在需要的时候从 localStorage 读取数据,并在组件更新时将数据写入:

import React, { useState, useEffect } from 'react';function MyComponent() {const [myObject, setMyObject] = useState(null);useEffect(() => {// 从 localStorage 读取对象const storedObjectString = localStorage.getItem('myKey');setMyObject(storedObjectString ? JSON.parse(storedObjectString) : null);}, []); // 空依赖数组意味着这个 effect 只在组件挂载时运行一次const saveObjectToLocalStorage = () => {const myObject = {name: 'Alice',age: 25,};localStorage.setItem('myKey', JSON.stringify(myObject));setMyObject(myObject); // 更新状态以反映最新存储的对象};return (<div>{myObject ? (<div><p>Name: {myObject.name}</p><p>Age: {myObject.age}</p></div>) : (<p>No object found in localStorage</p>)}<button onClick={saveObjectToLocalStorage}>Save Object</button></div>);
}export default MyComponent;

1.4 其他方法介绍

在这里插入图片描述参考文章

二、ahook

官方文档介绍
使用这个钩子之后,就和state用法很类似了

import React from 'react';
import { useLocalStorageState } from 'ahooks';export default function () {const [message, setMessage] = useLocalStorageState<string | undefined>('use-local-storage-state-demo1',{defaultValue: 'Hello~',},);return (<><inputvalue={message || ''}placeholder="Please enter some words..."onChange={(e) => setMessage(e.target.value)}/><button style={{ margin: '0 8px' }} type="button" onClick={() => setMessage('Hello~')}>Reset</button><button type="button" onClick={() => setMessage(undefined)}>Clear</button></>);
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • vue相关面试题
  • RCE-无字母数字webshell命令执行
  • 机器学习之随机森林
  • vulnhub系列:sp eric
  • 花式表演无人机技术详解
  • 去中心化技术的崛起:探索Web3的新时代
  • [240812] X-CMD 发布 v0.4.5:更新 gtb、cd、chat、hashdir 模块功能
  • function calling后,如何让大模型进行自然语言输出?
  • 使用python在不改变原有excel的格式下,修改指定单元格格式
  • Android10 修改设备名称
  • 【C#】中IndexOf的用法
  • 【EMC专题】ESD抑制器简要介绍
  • 《数据结构(C语言版)第二版》第六章-图(6.4 图的存储结构——6.4.1 邻接矩阵)
  • Java基础之字面值常量
  • html+css+js网页设计 大一电商6个页面 带js 有轮播图,增删改查等功能
  • python3.6+scrapy+mysql 爬虫实战
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • Angular 4.x 动态创建组件
  • HTML中设置input等文本框为不可操作
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Python - 闭包Closure
  • ReactNative开发常用的三方模块
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Vultr 教程目录
  • Yii源码解读-服务定位器(Service Locator)
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 订阅Forge Viewer所有的事件
  • 构造函数(constructor)与原型链(prototype)关系
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 计算机在识别图像时“看到”了什么?
  • 前嗅ForeSpider中数据浏览界面介绍
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 新版博客前端前瞻
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • ​​​【收录 Hello 算法】9.4 小结
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (一)appium-desktop定位元素原理
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转载)虚函数剖析
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .Net Core中的内存缓存实现——Redis及MemoryCache(2个可选)方案的实现
  • .NET 发展历程
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET基础篇——反射的奥妙