Использование Vuex с Nuxt и Vue-Native-Websocket

Я пытаюсь заполнить свой магазин vuex данными из веб-сокета. Я использую Nuxt. Для работы с websocket я использую пакет vue-native-websocket. Подключение к веб-сокету выполнено успешно, но фиксация в хранилище не работает, выдает ошибку при каждом событии сокета Uncaught TypeError: this.store[n] is not a function

Согласно документам Nuxt и vue-native-websocket, я использовал их следующим образом:

Плагин native-websocket.js:

import Vue from 'vue'
import VueNativeSock from 'vue-native-websocket'
import store from '~/store'

Vue.use(VueNativeSock, 'wss://dev.example.com/websocket/ws/connect', { store: store })

nuxt.config.js

  plugins: [
   {src: '~plugins/native-websocket.js', ssr: false}
],

Когда соединение установлено, я делаю вывод, что пакет подключен правильно, значит, дело в магазине, и я не могу понять, что не так

UPD: после некоторого обходного пути я обнаружил, что хранилище журналов внутри native-websocket.js возвращает

store() {
  return new __WEBPACK_IMPORTED_MODULE_1_vuex__["default"].Store({
   state: {...my store

и фиксация на нем возвращает __WEBPACK_IMPORTED_MODULE_2__store__.default.commit is not a function Так что это что-то о webpack, как я вижу

Вместо этого используйте обратный вызов в качестве третьего аргумента, passToStoreHandler: function (eventName, event) {, внутри выйдите из системы this.store, какое значение

Ohgodwhy 25.07.2018 18:00

@Ohgodwhy я только что пробовал, консоль чистая, обратный вызов не запускает { passToStoreHandler: function(eventName, event) { console.info(this.store); console.info('test') }}

Elijah Ellanski 25.07.2018 18:13

@Ohgodwhy Извините, я забыл передать магазин этому объекту. Теперь console.info возвращает мой store(), но ошибки нет, только если обратный вызов передан третьему объекту аргумента. В любом случае никаких коммитов для хранения не производится

Elijah Ellanski 25.07.2018 18:40

Может быть, попробуйте создать коммит самостоятельно и зафиксировать его в магазине. Это работает?

Ohgodwhy 25.07.2018 18:43

@Ohgodwhy Пробовал this.store.commit('incrementCounter') внутри passToStoreHandler. Получил this.store.commit is not a function

Elijah Ellanski 25.07.2018 19:15
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
5
5 720
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно импортировать магазин по-другому, например. получить его из контекста плагина. Здесь немного документы, но их несколько не хватает

import Vue from 'vue'
import VueNativeSock from 'vue-native-websocket'

export default ({ store }, inject) => {
  Vue.use(VueNativeSock, 'wss://dev.example.com/websocket/ws/connect', { store: store })
}

Другие вопросы по теме