在一个带有Vuex store的应用程序中,有一个getQueryParams
getter,它返回一个对象,该对象包含传递给数据库查询的参数。如果有任何参数(即用户已经查询了一些东西),那么我想在页面上显示一个横幅,表明他们已经这样做了(除其他事项外)。最初我通过在页面中放置以下内容来处理这个问题:
<v-row
v-if="Object.keys(getQueryParams).length >= 1"
>
<!-- various elements including a v-alert... -->
</v-row>
字符串
还有:
computed: {
...mapGetters("queryStore", ['getQueryParams']),
...
}
型
在商店里:
const getters = {
getQueryParams(state) {
return state.queryParams;
},
...
}
型
这正如预期的那样,导致banner在商店更改的那一刻出现。后来,需要在多个地方使用它,我将其移动到一个单独的QueryBanner组件。在这一点上,当getQueryParams的结果更改时,banner停止出现。我可以使用Vue dev工具看到商店更改,但是,例如,新组件中显示getQueryParams输出的console.log就没有。为什么会这样?
编辑:
这也不是运气:
computed: {
...mapGetters('multiTagsStore', ["getQueryParams"]),
queryStore() {
return this.$store.getters["multiTagsStore/getQueryParams"];
}
},
watch: {
queryStore(val) {
if (Object.keys(val).length > 0) {
this.showBanner = true;
}
else {
this.showBanner = false;
}
}
},
型
2条答案
按热度按时间ryoqjall1#
Object.keys()返回一个非React性数组,因此不会重新计算。尝试创建另一个computed:
字符串
使用模板中计算的值:
型
kqhtkvqz2#
所有试图在子组件中查看存储内容的尝试都失败了。但是,我能够通过在父组件中使用
Object.keys(getQueryParams).length > 0
并将此值作为prop传递给子组件来解决此问题。即。字符串
.和:
型
在孩子身上