import { reactive, toRaw } from 'vue';
const state = reactive({
items: []
});
const addItem = (item) => {
const rawState = toRaw(state);
const existingItemIndex = rawState.items.findIndex(i => i.name === item.name);
if (existingItemIndex !== -1) {
// 如果已存在,更新值
rawState.items[existingItemIndex].val = item.val;
} else {
// 如果不存在,直接push
state.items.push(item);
}
};
// 使用示例
addItem({ name: 'item1', val: 'value1' });
addItem({ name: 'item2', val: 'value2' });
addItem({ name: 'item1', val: 'newValue1' }); // 更新item1的值
在这个例子中,addItem
函数首先将响应式状态转换成原始对象,然后检查该数组中是否已存在具有相同name
属性的对象。如果存在,则更新它的val
属性;如果不存在,则将新项目push到数组中。这样可以确保state.items
数组中不会有重复的项目。