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
},