socket.io.clinet的回调中使用vuex dispatch或者commit方法修改state 但是视图不刷新

发布于 2022-09-07 16:09:30 字数 1619 浏览 11 评论 0

写一个项目需要从后台接受推送数据然后显示出来
所以用socket.io.client通信
现在问题是通过在socket.io回调中使用store的dispatch或者commit方法来修改state 可以看到打印出来的state值已经修改 但是vue组件的视图层不刷新新的值 调用$store.getters.userCounts始终是0
请教一下这是为什么

main.js

import Vue from 'vue'
import axios from 'axios'

import App from './App'
import router from './router'
import store from './store'

import io from 'socket.io-client'
const domain = '127.0.0.1'
const port = '3000'

const socket = io('http://' + domain + ':' + port)

if (!process.env.IS_WEB) Vue.use(require('vue-electron'))
Vue.http = Vue.prototype.$http = axios
Vue.config.productionTip = false
Vue.use(socket, store)

/* eslint-disable no-new */
new Vue({
  components: { App },
  router,
  store,
  template: '<App/>',
  created () {
    this.startClinet()
  },
  methods: {
    startClinet () {      
      // 连接后登录
      socket.on('connect', () => {
        this.$store.dispatch('updateDatasAction', 6666)
        // socket.emit('login', uid)
      })

      // 后端推送来消息时
      socket.on('refresh', function (response) {
        // store.dispatch('updateDatasAction', response)
      })
    }
  }
}).$mount('#app')

store.js

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    todayUsers: 0
  },
  getters: {
    userCounts: state => {
      return state.todayUsers
    }
  },
  mutations: {
    UPDATA_DATAS (state, datas) {
      state.todayUsers = datas
    }
  },
  actions: {
    updateDatasAction (context, datas) {
      context.commit('UPDATA_DATAS', datas)
    }
  }
})

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文