【发布时间】:2021-10-04 12:42:14
【问题描述】:
我有一个 state 对象作为来自另一个组件的道具传递。我按预期收到了state。然后我将props 存储在toRef() 中以进行反应。
我想要发生的是当state 中的数据发生变化时,我希望浏览器中的数据进行更新。就像现在一样,vue 开发工具中的数据确实得到了更新,我确实看到 state 对象发生了变化,但浏览器在我手动刷新浏览器之前不会反映这些变化,这是一个不受欢迎的结果。
为什么会这样:
组件:
<template>
<div class="show-products">
<Product
v-for="data in products"
:key="data.id"
:product="data"
/>
</div>
</template>
<script>
import {computed, onMounted, toRefs, watch } from "vue";
import {useStore} from "vuex";
export default {
components: {Product},
props: {
state: Object
},
setup (props) {
const store = useStore();
const products = computed(() => store.getters.getProducts);
let stateRef = toRefs(props).state;
onMounted(() => {
store.dispatch('getProducts');
});
watch(stateRef, (currentState, prevState) => {
if (currentState.length !== prevState.length) {
store.dispatch('getProducts');
}
})
return {
Product,
products,
}
}
}
</script>
【问题讨论】:
-
也许你可以指定你的道具,比如this solution
-
不要将其设置为参考,然后观看参考。像上述解决方案建议的那样直接观看道具。
标签: vue.js vuejs3 vue-composition-api