【问题标题】:Using vue-socket.io-extended, emit with vuex problem使用 vue-socket.io-extended,发出 vuex 问题
【发布时间】:2020-04-22 16:33:14
【问题描述】:

我用 vue-cli 做了一个聊天应用来练习。我使用 vue-socket.io-extended 作为客户端的插件来建立 socket-io 连接。

我发送到 vuex 存储中的服务器,以便我能够连接到任何公用包内的套接字。

这是我在 vuex 操作中编写发出调用的方式:

actions: {
  emitSendMsg(dispatch, msgToSend){
    return new Promise((resolve, reject) => {
      this._vm.$socket.client.emit('msg', msgToSend,(error)=>{
        if(error){
          return reject(error);
        }
        resolve();
      })        
    })
  }
}

这就是我在 vue 组件方法中调用 emit 函数的方式:

methods:{
  sendMsg(){
    const self = this;
    if(!self.msgToSend){
      return alert('Please input mssage');
    }      
    self.disableCompose();
    self.$store.dispatch("emitSendMsg", self.msgToSend).then(() => {
      self.clearCompose();
    }).catch(function(error) {
      alert(error);
      self.clearCompose();
    });      
  }
}

如您所见,我使用 Promise 以便方法可以执行回调操作。

实际上它工作正常,问题是,在 vuex 的发射函数中,我创建了一个变量“dispatch”并且我没有实际使用它,并且我让我不通过规则“no-unused- es-lint 的 vars”,除非禁用规则,否则我无法将文件提交到 git。

插件的npm页面提供的下面的语法我试过了,但是不行。

actions: {
    emitSocketEvent(data) {
      this._vm.$socket.client.emit('eventName', data);
      this._vm.$socket.client.emit('with-binary', 1, '2', { 3: '4', 5: new Buffer(6) });
    }
  }

那么有没有更合适的方法来完成这项工作?

【问题讨论】:

    标签: vue.js socket.io vuex eslint


    【解决方案1】:

    您可以在变量前加上下划线和ignore it

    或者你可以传递一个空对象emitSendMsg({}, msgToSend)

    此外,作为第一个参数传递给操作的对象是 context 而不是 dispatch,它不是可选的。

    如果您只需要dispatch,您可以使用object destructuring emitSendMsg({ dispatch }, msgToSend)

    【讨论】:

    • 我试过空对象,它违反了非空模式规则。我应该改用 emitSendMsg(_context, msgToSend) 吗?
    猜你喜欢
    • 2022-07-13
    • 2020-07-11
    • 2021-03-21
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 2021-07-08
    • 2021-03-28
    相关资源
    最近更新 更多