Javascript Vue.js Vuex状态更改不会发生';t使用v-if重新提交模板

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; } 但是模板从不重新

我已经尝试在computed、data中设置v-if值,作为道具传递,只是对state的直接引用,但它从未重新呈现,尽管我检查的状态已更改为true

目前我有它直接参考商店

<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);
}