vue watch mapState 不工作
vue watch mapState not working
我在我的组件中使用了一个存储值并尝试更新 it.The 当我点击按钮时存储值发生了变化,但是这个变化没有反映在组件输出中(即 {{query}})
<template>
span {{query}}
button(@click='updateQuery')
</template>
<script>
export default {
computed: mapState('map', [
'query'
]),
methods: {
...mapMutations('map', [
'setStart'
]),
updateQuery() {
this.setStart(new Date());
}
}
}
</script>
商店:
export default {
namespaced: true,
state: {
query: {},
start: null,
end: null
},
mutations: {
setQuery(state, value) { state.query = value },
setStart(state, value) {
state.start = value;
state.query.timestamp = state.query.timestamp ? state.query.timestamp : {};
state.query.timestamp.$gte = value;
},
setEnd(state, value) {
state.end = value;
state.query.timestamp = state.query.timestamp ? state.query.timestamp : {};
state.query.timestamp.$lte = value;
},
}
}
这里的问题是 Vue cannot detect 您正在向 query
对象动态添加新属性。
在此代码中:
state.query.timestamp = state.query.timestamp ? state.query.timestamp : {};
您正在向 query
添加之前不存在的 timestamp
属性。因此,它不会反应。为了正确使用 Vue,您需要使用 Vue.set.
Vue.set(state.query, `timestamp`, state.query.timestamp ? state.query.timestamp : {})
请注意,您还需要在 $gte
属性 的下一行执行此操作。
或者,您可以初始化查询对象。
state: {
query: {
timestamp:{
$gte: null,
$lte: null
}
},
start: null,
end: null
},
我在我的组件中使用了一个存储值并尝试更新 it.The 当我点击按钮时存储值发生了变化,但是这个变化没有反映在组件输出中(即 {{query}})
<template>
span {{query}}
button(@click='updateQuery')
</template>
<script>
export default {
computed: mapState('map', [
'query'
]),
methods: {
...mapMutations('map', [
'setStart'
]),
updateQuery() {
this.setStart(new Date());
}
}
}
</script>
商店:
export default {
namespaced: true,
state: {
query: {},
start: null,
end: null
},
mutations: {
setQuery(state, value) { state.query = value },
setStart(state, value) {
state.start = value;
state.query.timestamp = state.query.timestamp ? state.query.timestamp : {};
state.query.timestamp.$gte = value;
},
setEnd(state, value) {
state.end = value;
state.query.timestamp = state.query.timestamp ? state.query.timestamp : {};
state.query.timestamp.$lte = value;
},
}
}
这里的问题是 Vue cannot detect 您正在向 query
对象动态添加新属性。
在此代码中:
state.query.timestamp = state.query.timestamp ? state.query.timestamp : {};
您正在向 query
添加之前不存在的 timestamp
属性。因此,它不会反应。为了正确使用 Vue,您需要使用 Vue.set.
Vue.set(state.query, `timestamp`, state.query.timestamp ? state.query.timestamp : {})
请注意,您还需要在 $gte
属性 的下一行执行此操作。
或者,您可以初始化查询对象。
state: {
query: {
timestamp:{
$gte: null,
$lte: null
}
},
start: null,
end: null
},