提问人:user3118363 提问时间:10/12/2023 最后编辑:user3118363 更新时间:10/12/2023 访问量:39
VUE:如何使用 watch 和 vue get 和 set 组合 api
VUE: how to use watch with vue get and set composition api
问:
我正在尝试创建一个可搜索的表元素,用户还可以在其中搜索和过滤返回的结果。但我似乎无法了解如何在计算的属性设置器中设置值。
但是我不断收到大量错误,例如: RangeError:超出最大调用堆栈大小
import { watch } from "vue";
import { computed, ref, reactive } from "vue";
import { useStore } from "vuex";
const searchText = ref("");
watch(searchText, () => filterHistory());
const user = computed(() => store.getters["profile/getProfile"]);
const reversedHistory = computed({
get() {
return user.value.history.reverse();
},
set(value) {
reversedHistory.value = value;
},
});
const filterHistory = () => {
let newHistory = reversedHistory.value.filter(
(item) => searchText === item.person
);
rerturn newHistory
};
答:
1赞
Estus Flask
10/12/2023
#1
reversedHistory
在 setter 内部改变自身,这会导致递归。
考虑到用户历史记录预计将从商店使用,因此拥有相关的 Vuex getter 是有意义的,例如 .profile/getHistory
改变只读计算通常是不正确的,因为它可能会在下次更新时丢弃更改。
Vuex 状态不应该在商店之外发生突变,应该有一个动作或突变。
它可能是:
const reversedHistory = computed({
get() {
return store.getters["profile/getHistory"]).reverse();
},
set(value) {
store.commit('profile/setHistory', value.reverse());
},
});
评论
0赞
user3118363
10/12/2023
哦哦,我让你完整,这完全有道理,我试图避免的是太多的状态更新。我试图创建一个临时变量来保存更改,而不是在每次按键时点击存储,但我会使用它,非常感谢,这很有意义。
评论