vue3 里面的 itemList.reduce

这段代码的意思是:对 itemList 数组进行遍历,把每一项的 age 属性累加起来,最终得到所有 age 的总和。

代码拆解

Go 复制代码
itemList.reduce((pre, cur) => {
  return pre += cur.age
}, 0)
  1. ‌**reduce 方法**‌:遍历数组,把每次计算的结果累积起来。
  2. ‌**pre(累加器)** ‌:上一次回调返回的结果,初始值是后面的 0。
  3. ‌**cur(当前项)** ‌:当前遍历到的数组元素,在这里是 itemList 里的每个对象。
  4. ‌**cur.age** ‌:取当前对象的 age 属性值。
  5. ‌**return pre += cur.age**‌:把当前项的年龄加到累加器上,并返回给下一次循环。‌‌

最终结果就是 itemList 里所有对象 age 属性的总和。

举个实际例子

Go 复制代码
const itemList = [
  { name: '张三', age: 18 },
  { name: '李四', age: 22 },
  { name: '王五', age: 25 }
]

const totalAge = itemList.reduce((pre, cur) => {
  return pre += cur.age
}, 0)

console.log(totalAge) // 输出 65

几个容易踩的坑

  • ‌必须传初始值 0 ‌:如果数组为空,不传初始值会直接报错;传了 0 则安全返回 0。
  • ‌**pre += cur.age 和 pre + cur.age 效果一样** ‌:+= 会赋值,+ 只计算不赋值,但因为 return 都会返回结果,所以写法上等价。
  • ‌回调里必须 return ‌:如果忘了写 return,累加器会变成 undefined,结果就不对了。‌‌

在 Vue3 里的实际用法

通常在 computed 计算属性里配合使用,实现响应式求和:

Go 复制代码
import { ref, computed } from 'vue'

const itemList = ref([
  { name: '篮球', age: 2 },
  { name: '足球', age: 5 },
  { name: '羽毛球', age: 4 }
])

const totalAge = computed(() => {
  return itemList.value.reduce((pre, cur) => pre + cur.age, 0)
})

这样 itemList 里的数据变化时,totalAge 会自动更新。‌‌

localStorage 本地存储

Go 复制代码
 // localStorage  本地存储
  // const localStorageToken = localStorage.getItem("token")
  // console.log("localStorageToken",localStorageToken)
  // // 本地存储  写入
  // localStorage.setItem("token","123456")



  // // 本地存储  读取
  // const token = localStorage.getItem("token")
  // console.log("token",token)



  // // 本地存储  删除
  // localStorage.removeItem("token")
  // // 本地存储  清空
  // localStorage.clear() 


// *****************************************************

关键注意点
‌只能存字符串‌:localStorage 只能存字符串,存对象或数组必须先 JSON.stringify,取出来再 JSON.parse。‌‌
javascript
// 存对象
const userInfo = { id: 1, name: '张三' }
localStorage.setItem('userInfo', JSON.stringify(userInfo))

// 取对象
const stored = JSON.parse(localStorage.getItem('userInfo') || '{}')
console.log(stored.name) // 张三
‌存储容量有限‌:一般限制在 5MB 左右,数据量太大会报错,别往里塞大文件或大量缓存数据。‌‌

‌删除‌:localStorage.removeItem('key') 删单个,
清空全部 :localStorage.clear() 

进阶方案
1 :先安装:npm i @vueuse/core
2 :加载:import { useStorage } from '@vueuse/core';
3 :删除 localstoreage 值: <button @click="clear">删除</button>

# 代码开始

   // 自动序列化,返回响应式 ref
const userInfo = useStorage('userInfo', { id: 1, name: '张三' })

// 直接改值,自动写入 localStorage
userInfo.value.name = '李四999977777'
console.log("userInfo.value.name",userInfo.value.name)

// 读取 localStorage 中的 userInfo
const a = useStorage('userInfo', "")
console.log("a.value",a.value)

// 读取 localStorage 中的 userInfo 并解析为 JSON 对象
const userInfoJson = useStorage('userInfo', "")
console.log("userInfoJson.value",userInfoJson.value)

//删除
const clear = () => {
    userInfo.value = null
   }

# 代码结束


‌封装工具函数‌:项目里可以封装 set / get / remove 方法,自动处理 JSON 序列化,代码更干净。
‌用 VueUse 的 useStorage‌:装了 @vueuse/core 的话,useStorage 可以把存储变成响应式 ref,改值自动写入存储,取出来也是响应式的。‌‌

javascript
import { useStorage } from '@vueuse/core'

// 自动序列化,返回响应式 ref
const userInfo = useStorage('userInfo', { id: 1, name: '张三' })

// 直接改值,自动写入 localStorage
userInfo.value.name = '李四'
‌需要响应式更新‌:如果希望多个组件同步 localStorage 的变化,可以结合 watch 或监听 storage 事件实现。‌‌
localStorage 的使用细节不少,可以继续了解JSON.stringify 会处理循环引用吗?或者storage 事件如何监听本地存储变化?

监听响应式变量变化,自动保存到localStorage

Go 复制代码
// 监听响应式变量变化,自动保存到localStorage
  watchEffect(() => {
    try {
      window.localStorage.setItem(key, JSON.stringify(storedValue.value));
    } catch (error) {
      console.warn(`Error setting localStorage key "${key}":`, error);
    }
  });

------------------------------------------------
版权声明:本文为CSDN博主「繁若华尘」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41504401/article/details/145624397

【Vue3】使用mitt实现任意组件通信

安装:【Vue3】使用mitt实现任意组件通信_vue3 mitt-CSDN博客

npm install mitt

Go 复制代码
常用API
mitt().on() 绑定事件
mitt().emit() 触发事件
mitt().off() 卸载某个事件
mitt().all.clear() 卸载全部事件
使用方式一:封装模块暴露
步骤一
封装到utils工具箱中,对外暴露一个mitt实例

import mitt from 'mitt'

const emitter = mitt()

export default emitter;

------------------------------------------------
版权声明:本文为CSDN博主「心潮的滴滴」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42582773/article/details/139692216
相关推荐
tryxr1 小时前
索引概念和索引底层数据结构
数据结构·索引
锋行天下1 小时前
langgraph 循环节点的静态和动态实现
前端·后端
All for pursuit.1 小时前
【完结】LeetCodeHot100题 详细解题过程及代码汇总
数据结构·c++·算法·leetcode
keyipatience2 小时前
JS学习笔记(2)数组,函数,作用域,对象
前端·javascript·笔记·学习·html
mmmmath_32 小时前
LeetCode.101.对称二叉树
数据结构·leetcode
2603_965148112 小时前
商品价格监控 API 接口:从原理到实战的完整指南
java·前端·数据库·python·生活
酷虎软件2 小时前
视频加字幕怎么制作
java·前端·音视频
Logic1012 小时前
C语言/数据结构位运算题解:异或XOR找出数轴移动中只出现一次的指令——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
重生之小比特2 小时前
【算法拾光】双指针|移动零 + 复写零
数据结构·c++·算法