Architectural Problem in uso di ToneJS con Vuex

0

Sto utilizzando la libreria Tone.js per creare un sequencer (musicale) in Vue + Vuex e ho riscontrato questo problema :

Le singole tracce musicali del sequencer vengono create dinamicamente, quindi sto memorizzando oggetti per loro su state , incluso un riferimento ai loro sintetizzatori (es: new Tone.Synth() ) ... quando questi synth vengono riprodotti (my call, da App.vue : this.synths[index].triggerAttackRelease(pitch, '8n', time) , si avviano ma non si fermano e, a seconda del tempo, possono sovraccaricare lo stack. Fondamentalmente, sembra che Tone.js stia tentando di mutare direttamente il state , che causa mayhem ... vale a dire: la modalità strict attiva un avviso: vue.esm.js? efeb: 591 [Vue warn]: errore nel callback per watcher "function () {return this._data. $$ state}": "Errore: [vuex] Non muta lo stato dell'archivio di vuex al di fuori dei gestori di mutazione."

Sono abbastanza sicuro di aver diagnosticato correttamente il problema qui, ma la soluzione sembra un po 'tortuosa: creare un array nel mio stato App.vue per ospitare i synth e quindi aggiornarlo in parallelo con le informazioni sulla traccia su lo stato di Vuex. La cosa che mi sembra particolarmente problematica è che ho Salva / carica (usando LocalStorage) che essenzialmente copia / ripropone lo stato di Vuex; a questi dovrei aggiungere una funzione che aggiorna anche questi synth sull'app principale. Doable , ma sembra indiretto e strano.

In particolare mi chiedo : c'è un modo migliore? Che tipo di approcci sono i migliori per questo tipo di situazione? Quali concetti o principi potrei aver bisogno di sapere per scrivere un buon codice qui? E, naturalmente, se pensi di non aver correttamente diagnosticato il problema, ti prego di farmelo sapere anche io.

Infine, dovrei chiarire che sono un hobbista, non un professionista, e per via dei limiti di tempo sono davvero abbastanza legato a Vue / Vuex per il momento.

Grazie per l'aiuto che puoi offrire!

    
posta Gregory Tippett 06.04.2018 - 01:17
fonte

1 risposta

1

Questo potrebbe non essere di grande aiuto perché la risposta è in React + Redux, ma sembra un buon modo di progettare un'applicazione, quindi forse puoi ottenere l'idea astratta e lavorarla a tuo vantaggio. link

Se tratti il synth come una cosa che non muta lo stato, ma risponde solo agli aggiornamenti in stato. Non conosco Vue, ma penso che potresti "ascoltare" le modifiche alla funzione beforeUpdate del tuo componente giusto? link - così tutte le tue cose modificano i cambiamenti lì dentro?

Non so se sia d'aiuto, ma la mia implementazione per il processoEvent descritto dall'articolo è qui: link

Il mio sistema usa Redux che mappa le modifiche in stato (il Redux Store) in 'oggetti di scena' usando un Container. Gli eventi vengono passati dalla mia funzione componentWillUpdate , che è probabilmente simile alla tua funzione beforeUpdate in Vue

Speriamo che non sia confuso. Ho avuto errori simili a te con lamentele su cose che accadono nel "flusso" di Redux, che suona come quello che ti sta succedendo con Vuex poiché sono entrambe implementazioni "Flux" - quando ho ottenuto le mie cose all'interno delle corrette funzioni del ciclo di vita che sembrava funzionare.

    
risposta data 20.06.2018 - 23:28
fonte

Leggi altre domande sui tag