pinia里面定义了一个 arr = [{name:‘福利一’},{name:‘福利二’},{name:‘福利三’}] 和一个变量b 默认b的值为true 想实现 只要arr里面任意一个元素的name值发生了变化 就把b的值赋为false
时间: 2024-10-13 16:10:23 浏览: 26
Vue 3 + TypeScript + Vite + pinia + router 脚手架
在Vue 3中,可以使用Pinia状态管理库来管理组件之间的数据共享,同时结合`watchEffect`或`reactive`来监听数组的变化。首先,你需要定义一个Pinia模块并初始化`arr`和`b`:
```js
import { createStore } from 'pinia'
export const store = createStore({
id: 'myStore',
state: () => ({
arr: [{ name: '福利一' }, { name: '福利二' }, { name: '福利三' }],
b: true,
}),
actions: {
updateName(newName) {
this.arr.forEach((item) => {
if (item.name === newName) {
this.b = false // 当找到匹配项时,更新b的值为false
}
});
},
},
getters: {
hasChanged() {
return this.b;
},
},
});
```
然后,在需要的地方,你可以通过`store`对象来操作这些数据,并监听`arr`的变化:
```html
<template>
<div>
<button @click="updateName('新的福利名称')">修改名字</button>
<p>是否发生改变: {{ $store.getters.hasChanged }}</p>
</div>
</template>
<script setup>
import { useStore } from '@pinia/core';
const store = useStore(store);
function updateName(newName) {
// ...这里省略了对arr的搜索部分,因为已经在actions中实现了
store.updateName(newName);
}
</script>
```
当你点击按钮并更改数组中的某个元素名时,`updateName`函数会被触发,会自动更新`b`的状态。
阅读全文