Javascript Vue.js Vuex状态更改不会发生';t使用v-if重新提交模板
我已经尝试在computed、data中设置v-if值,作为道具传递,只是对state的直接引用,但它从未重新呈现,尽管我检查的状态已更改为true 目前我有它直接参考商店Javascript Vue.js Vuex状态更改不会发生';t使用v-if重新提交模板,javascript,ajax,vue.js,axios,vuex,Javascript,Ajax,Vue.js,Axios,Vuex,我已经尝试在computed、data中设置v-if值,作为道具传递,只是对state的直接引用,但它从未重新呈现,尽管我检查的状态已更改为true 目前我有它直接参考商店 <template v-if="this.$store.state.showReviews"> 状态变为真 showReviews (state, payload){ console.log("showReviews"); state.showReviews = payload; } 但是模板从不重新
<template v-if="this.$store.state.showReviews">
状态变为真
showReviews (state, payload){
console.log("showReviews");
state.showReviews = payload;
}
但是模板从不重新呈现。您是否尝试过使用getter或计算值
computed: {
showReviews() {
return this.$store.state.reviews || []
},
reviews() {
return this.$store.state.showReviews === true
}
}
此外,最好尽可能使用Vue.$set,而不是简单的赋值
Import Vue from 'vue';
showReviews (state, payload){
Vue.$set(state, 'showReviews', payload);
}
虽然这可能无法解决某些值类型的问题,但IMHO,始终应用是一个好主意,这样您就不会忘记确实需要它的值类型
最后,如果您真的很难获得反应性,可以通过调用
this.$forceUpdate()强制重新渲染代码>(或Vue.$forceUpdate();
)突变后showReviews
最初是在vuex状态下声明的吗?Vue无法检测属性添加。是,它最初是在我的状态中声明的。。。const state={bikes:[],reviews:[],showriews:false,uploadProgress:[]}您在模板
中没有使用此
,我已经做了更改,但结果相同。我用{{}检查了存储,它返回true,但没有重新渲染。如果您有权访问它,您应该将其设置为json。谢谢。这是一个非常好的答案,使我能够更好地理解Vue.js以及setter和getter:。正是使用Vue.set实现了这一点!
Import Vue from 'vue';
showReviews (state, payload){
Vue.$set(state, 'showReviews', payload);
}