Как я могу предотвратить вмешательство Vuex в мой экземпляр класса? - PullRequest
2 голосов
/ 02 июня 2019

Я пытаюсь сохранить экземпляр класса в Vuex (EditorState из ProseMirror).Этот класс более или менее неизменен извне, что означает, что всякий раз, когда я хочу внести в него изменения, я просто помещу новый экземпляр класса в Vuex.

Поэтому мне не нужно вносить изменения в Vue.отслеживание здесь, и на самом деле, похоже, что оно на самом деле мешает внутренней работе ProseMirror, поэтому мне было интересно, есть ли способ изолировать мой объект от Vue, чтобы он обрабатывался атомарно.

1 Ответ

0 голосов
/ 02 июня 2019

Я исправил это, взяв предложение из верхнего ответа на этот вопрос и заморозив мой экземпляр класса перед тем, как передать его Vuex.

const store = new Store<AppState>({
    state: {
        editor: Object.freeze(editorState), // freeze because Vue reactivity messes it up
        filename: null,
        metadata: {}
    },
    mutations: {
        updateDocument(context, transaction: Transaction) {
            console.log("updateDocument called");

            // freeze again
            context.editor = Object.freeze(context.editor.apply(transaction));
        }
    },
    strict: process.env.NODE_ENV === "development"
});

Поскольку Object.freeze не является рекурсивным, это не влияет на внутреннюю работу ProseMirror, но не позволяет Vue пытаться изменить объект.

...