localStorage 传值使用总结

本文介绍了HTML5中的localStorage特性,详细解释了它与sessionStorage的区别,包括数据存储方式、优势及局限性。并通过实例展示了如何使用localStorage进行数据的存储、读取、删除等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是localStorage、sessionStorage
在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的是5M大小,这个在不同的浏览器中localStorage会有所不同。

二、localStorage的优势与局限
(1).localStorage的优势
1、localStorage拓展了cookie的4K限制
2、localStorage会可以将第一次请求的数据直接存储到本地,这个相当于一个5M大小的针对于前端页面的数据库,相比于cookie可以节约带宽,但是这个却是只有在高版本的浏览器中才支持的
(2).localStorage的局限
1、浏览器的大小不统一,并且在IE8以上的IE版本才支持localStorage这个属性
2、目前所有的浏览器中都会把localStorage的值类型限定为string类型,这个在对我们日常比较常见的JSON对象类型需要一些转换
3、localStorage在浏览器的隐私模式下面是不可读取的
4、localStorage本质上是对字符串的读取,如果存储内容多的话会消耗内存空间,会导致页面变卡
5、localStorage不能被爬虫抓取到

sessionStorage保存的数据用于浏览器的一次会话,当会话结束(通常是该窗口关闭),数据被清空;localStorage保存的数据长期存在,下一次访问该网站的时候,网页可以直接读取以前保存的数据。除了保存期限的长短不同,这两个对象的属性和方法完全一样。

简而言之:localStorage与sessionStorage的唯一一点区别就是localStorage属于永久性存储,而sessionStorage属于当会话结束的时候,sessionStorage中的键值对会被清空

三.localStorage自带api


1.清空localStorage
localStorage.clear()    // undefined    
console.log(localStorage )           // Storage {length: 0}

2.存储数据
localStorage.setItem("name","caibin") //存储名字为name值为caibin的变量
localStorage.name = "caibin"; // 等价于上面的命令
console.log(localStorage )  // Storage {name: "caibin", length: 1}

3.读取数据
localStorage.getItem("name") //caibin,读取保存在localStorage对象里名为name的变量的值
localStorage.name // "caibin"
localStorage.valueOf() //读取存储在localStorage上的所有数据
localStorage.key(0) // 读取第一条数据的变量名(键值)
//遍历并输出localStorage里存储的名字和值
for(var i=0; i<localStorage.length;i++){
    console.log('localStorage里存储的第'+i+'条数据的名字为:'+localStorage.key(i)+',值为:'+localStorage.getItem(localStorage.key(i)));
}

4.删除某个变量
localStorage.removeItem("name"); //undefined
console.log(localStorage )// Storage {length: 0} 可以看到之前保存的name变量已经从localStorage里删除了

5.检查localStorage里是否保存某个变量
localStorage.hasOwnProperty('name') // true
localStorage.hasOwnProperty('sex')  // false

6.将数组转为本地字符串
var arr = ['aa','bb','cc']; // ["aa","bb","cc"]
localStorage.arr = arr //["aa","bb","cc"]
localStorage.arr.toLocaleString(); // "aa,bb,cc"

7.将JSON存储到localStorage里
var students = {
    xiaomin: {
        name: "xiaoming",
        grade: 1
    },
    teemo: {
        name: "teemo",
        grade: 3
    }
}

students = JSON.stringify(students);  //将JSON转为字符串存到变量里
console.log(students);
localStorage.setItem("students",students);//将变量存到localStorage里

var newStudents = localStorage.getItem("students");
newStudents = JSON.parse(students); //转为JSON
console.log(newStudents); // 打印出原先对象
四.列子

1.josnTable.txt

[{
	"id": "1",
	"bgxmmc": "血压测试1",
    "jyjg00":"正常",
    "jgzcbz":"提示1",
    "dw0000":"次",
    "ckfw00":"10-23"
 }, {
    "id": "2",
	"bgxmmc": "血压测试2",
    "jyjg00":"低于",
    "jgzcbz":"提示1",
    "dw0000":"次",
    "ckfw00":"10-23"
 }, {
    "id": "3",
	"bgxmmc": "血压测试3",
    "jyjg00":"高于",
    "jgzcbz":"提示1",
    "dw0000":"次",
    "ckfw00":"10-23"
 },{
    "id": "4",
    "bgxmmc": "血压测试1",
    "jyjg00":"正常",
    "jgzcbz":"提示1",
    "dw0000":"次",
    "ckfw00":"10-23"
 }, {
    "id": "5",
    "bgxmmc": "血压测试2",
    "jyjg00":"低于",
    "jgzcbz":"提示1",
    "dw0000":"次",
    "ckfw00":"10-23"
 }, {
    "id": "6",
    "bgxmmc": "血压测试3",
    "jyjg00":"高于",
    "jgzcbz":"提示1",
    "dw0000":"次",
    "ckfw00":"10-23"
 },{
    "id": "7",
    "bgxmmc": "血压测试1",
    "jyjg00":"正常",
    "jgzcbz":"提示1",
    "dw0000":"次",
    "ckfw00":"10-23"
 }]

2.index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
	<title>test</title>
	<script src="jQuery-2.1.4.min.js"></script>
</head>
<body>
<div>
	<input id="aintt" type="text" />
	<input id="abtn" type="button" value="测试"/>
</div>
</body>
<script>
$(function(){
	$("#abtn").on("click",function(){
		var str = $("#aintt").val();
		if(!str){
			str="未输入,默认为空。";
		}
		localStorage.setItem("aintt_val",str);//存储直接输入的值
		$.getJSON('jsonTable.txt',function(data){  
	       localStorage.setItem("object",JSON.stringify(data));//存储json数据  JSON.stringify()这个方法,来将JSON转换成为JSON字符串               
	    }); 

		window.location.href="child1.html";
	});

});
</script>
</html>
3.child1,html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
	<title>test</title>
	<script src="jQuery-2.1.4.min.js"></script>
</head>
<body>
<div>
	<div>从index.html传过来的值为:<lable id="bdiv"></label></div>
	<h1>json传值过来:</h1>
	<table class="print-table"border="1">  
	    <tr>  
	        <th>编号</th>  
	        <th>报告项目名称</th>  
	        <th>结果</th>  
	        <th>提示(结果正常标志)</th>  
	        <th>单位</th>  
	        <th>参考区间</th>  
	    </tr>  
	</table>  
</div>
</body>
<script>
$(function(){
	var str=localStorage.getItem("aintt_val");
	$("#bdiv").html(str);
	var newStudents = JSON.parse(localStorage.getItem("object")); //取出json数据 并转成json
	$.each(newStudents, function(i, result) {    
        item = "<tr><td>" + result['id'] + "</td>"+  
                "<td>" + result['bgxmmc'] + "</td>"+  
                "<td>" + result['jyjg00'] + "</td>"+  
                "<td>"+ result['jgzcbz'] + "</td>"+  
                "<td>" + result['dw0000'] + "</td>"+  
                "<td>"+ result['ckfw00'] +"</td></tr>";    
        $('.print-table').append(item);    
   });    
});

</script>
</html>

<think>好的,用户现在想了解如何使用Vuex在Vue组件之间递数据,并希望看到示例代码。根据之前的对话历史,我之前已经提供了关于登录超时的解决方案,但用户现在转向了Vuex的状态管理。用户提供的引用内容中提到了Vuex的基本使用、状态持久化问题以及Vue3中的使用方法。 首先,我需要确定用户的具体需求。他们可能是在开发一个Vue应用时遇到了组件间数据共享的问题,想要通过Vuex来集中管理状态。用户可能需要一个清晰的步骤说明和示例代码,特别是针对Vue3的,因为引用[4]和[5]提到了Vue3中的Vuex使用。 接下来,我需要考虑用户可能不熟悉的地方。比如,Vuex的核心概念(state、mutations、actions、getters)以及如何在组件中访问和修改这些状态。同时,用户可能在状态持久化方面有疑问,因为引用[2]和[3]提到刷新页面后数据丢失的问题,但当前问题主要关注数据递,可能需要简要提及持久化解决方案,但重点应放在数据递的示例上。 然后,我需要组织回答结构。通常,分步骤说明会更清晰,例如:安装Vuex、创建store、在组件中使用state/getters、通过mutations/actions修改状态。同时,提供Vue3的组合式API示例,因为用户引用的内容中有Vue3的相关信息。 还要注意代码示例的正确性,特别是在Vue3中使用Vuex的方式可能与Vue2有所不同,比如使用createStore和setup函数中的useStore。同时,用户可能对mapState等辅助函数感兴趣,引用[5]中提到了mapState的使用,所以需要包含统和组合式两种方式。 另外,用户可能遇到的问题包括如何在组件之间保持状态同步,如何触发状态变更,以及模块化store的结构。需要确保示例覆盖这些方面,并给出最佳实践建议,比如使用actions处理异步操作,而不是直接提交mutations。 最后,考虑是否需要补充相关问题,帮助用户深入理解,比如持久化、模块化或与Vue Router的集成。这可以增强回答的全面性,但要根据用户当前问题优先级排列,避免信息过载。 总结来说,回答需要步骤明确,代码示例准确,涵盖Vue3的用法,并引用提供的参考文献中的相关信息,如使用vuex-persist解决持久化问题,但主要聚焦在数据递的解决方案上。</think>以下是在Vue3中使用Vuex实现组件间数据递的完整解决方案,包含基础实现和进阶用法: ### 一、基础实现方案 #### 1. 安装配置Vuex ```bash npm install vuex@next --save ``` #### 2. 创建Vuex Store ```javascript // store/index.js import { createStore } from 'vuex' export default createStore({ state: { userInfo: { name: "张三", age: 25 }, cartCount: 0 }, mutations: { UPDATE_NAME(state, newName) { state.userInfo.name = newName }, ADD_CART(state) { state.cartCount++ } }, actions: { async fetchUserInfo({ commit }) { const res = await api.getUserInfo() commit('UPDATE_NAME', res.data.name) } }, getters: { formattedName: (state) => { return `${state.userInfo.name}(${state.userInfo.age}岁)` } } }) ``` #### 3. 组件间数据递示例 ```vue <!-- ComponentA.vue --> <template> <div> <p>当前用户:{{ formattedName }}</p> <button @click="updateName">修改用户名</button> </div> </template> <script> import { mapState, mapGetters, mapActions } from 'vuex' export default { computed: { ...mapState(['userInfo']), ...mapGetters(['formattedName']) }, methods: { ...mapActions(['fetchUserInfo']), updateName() { this.$store.commit('UPDATE_NAME', '李四') } } } </script> ``` ```vue <!-- ComponentB.vue --> <template> <div> <p>购物车数量:{{ cartCount }}</p> <button @click="addToCart">加入购物车</button> </div> </template> <script> import { mapState } from 'vuex' export default { computed: { ...mapState({ cartCount: state => state.cartCount }) }, methods: { addToCart() { this.$store.commit('ADD_CART') } } } </script> ``` ### 二、Vue3组合式API实现(推荐) ```vue <!-- ComponentC.vue --> <template> <div> <p>用户年龄:{{ userAge }}</p> <input v-model="newAge" type="number"> <button @click="updateAge">更新年龄</button> </div> </template> <script setup> import { computed, ref } from 'vue' import { useStore } from 'vuex' const store = useStore() const newAge = ref(0) // 获取state const userAge = computed(() => store.state.userInfo.age) // 提交mutation const updateAge = () => { store.commit('UPDATE_AGE', parseInt(newAge.value)) } </script> ``` ### 三、最佳实践建议 1. **模块化组织**(参考[^4]): ```javascript // store/modules/user.js export default { namespaced: true, state: () => ({ token: localStorage.getItem('token') || '' }), mutations: { SET_TOKEN(state, token) { state.token = token localStorage.setItem('token', token) } } } ``` 2. **状态持久化**(参考[^2][^3]): ```javascript // 使用vuex-persist import VuexPersistence from 'vuex-persist' const vuexLocal = new VuexPersistence({ storage: window.localStorage, reducer: (state) => ({ user: state.user }) // 仅持久化用户模块 }) export default createStore({ plugins: [vuexLocal.plugin] }) ``` ### 四、数据流示意图 ``` Component --> Dispatch Action --> Commit Mutation --> Update State --> Trigger Re-render ↖_________________Getters___________________________↙ ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值