xgqfrms™, xgqfrms® : xgqfrms's offical website of cnblogs! xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!

how to watch vuex state update

how to watch vuex state update

watch

https://vuex.vuejs.org/api/#watch

https://vuex.vuejs.org/guide/plugins.html

demo

this.$store.watch

this.$store.subscribe

https://dev.to/viniciuskneves/watch-for-vuex-state-changes-2mgj

...mapGetters

https://stackoverflow.com/questions/43270159/vue-js-2-how-to-watch-store-values-from-vuex


vuex watch demo

<template>
  <el-select
    v-model="ticketArea"
    @change="selectChange"
    class="live-area-select-box"
    size="small"
    placeholder="请选择票的选区">
    <el-option
      v-for="item in ticketAreas"
      :key="item.value"
      :label="item.label"
      :value="item.value">
    </el-option>
  </el-select>
</template>

<script>

import axios from 'axios';

import {
  createNamespacedHelpers,
} from 'vuex';

const {
  mapState,
  mapActions,
  mapMutations,
  mapGetters,
} = createNamespacedHelpers('seatSelect');

const log = console.log;

export default {
  name: 'AreaSelect',
  props: {
    ticketAreas: {
      type: Array,
      required: true,
      default: () => [],
    },
  },
  components: {},
  data() {
    return {
      ticketArea: "",
    };
  },
  watch: {
    ticketAreas: function(newValue, oldValue) {
      log(`\n\n\nticketAreas`, newValue);
      if(newValue) {
        this.updateTicketAreas(newValue || []);
      }
    },
  },
  computed: {
    ...mapState({
      svgAreaSelected: state => state.svgAreaSelected,
      storeSeatMap: state => state.seatMap,
      storeSeatData: state => state.seatData,
      isSVGEmpty: state => state.isSVGEmpty,
    }),
    // localComputed () { /* ... */ },
    geoJSON () {
      return JSON.stringify(this.$store.getters.geoJSON, null, 2)
    },
    ...mapGetters([
      // 'getSeatMap',
      'getSVGEmpty',
    ]),
  },
  methods: {
    ...mapActions([
      'saveGeoJSON',
      'setTicketAreas',
    ]),
    // ...mapActions({
    //   getSeatMap: 'getGeoJSON',// rename
    //   saveSeatMap: 'saveGeoJSON',// rename
    // }),
    updateTicketAreas(value){
      this.ticketAreas = value || [];
    },
    selectChange(value){
      log(`select 页面`, this.ticketAreas, value);
    },
  },
  mounted() {
    log(`ticketAreas  xxxxx`, this.ticketAreas)
  },
}
</script>

<style lang="less">
  .live-area-select-box{
    box-sizing: border-box;
    width: 100%;
    min-width: 100px;
    margin-bottom: 10px;
  }
</style>


posted @   xgqfrms  阅读(319)  评论(8编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2019-03-04 remote desktop software
2019-03-04 FileReader & Blob & File
2019-03-04 html5 & input & accept attribute
2019-03-04 clear & file input & reset & file input
2016-03-04 前端面试题分享+解答!
2016-03-04 如何强制删除 baidu/tempdata/con.dat 的垃圾文件! How to fix locked SD card: 读卡器 损坏,补救措施!
点击右上角即可分享
微信分享提示