gpt4 book ai didi

vue.js - vue watch mapState 不工作

转载 作者:搜寻专家 更新时间:2023-10-30 22:44:28 24 4
gpt4 key购买 nike

我在我的组件中使用了一个存储值并尝试更新它。当我点击按钮时存储值发生了变化,但是这个变化没有反射(reflect)在组件输出中(即 {{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 : {};

您要将 timestamp 属性添加到 query 中,该属性以前不存在。因此,它不会 react 。为了正确使用 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
},

关于vue.js - vue watch mapState 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44888440/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com