Как я могу предотвратить вмешательство Vuex в мой экземпляр класса?
Я пытаюсь сохранить экземпляр класса в Vuex (EditorState
из ProseMirror). Этот класс более или менее неизменен извне, что означает, что всякий раз, когда я хочу внести в него изменения, я просто помещу новый экземпляр класса в Vuex.
Поэтому мне не нужно отслеживать изменения Vue здесь, и на самом деле, похоже, что это на самом деле мешает внутренней работе ProseMirror, поэтому мне было интересно, можно ли как-то изолировать мой объект от Vue, чтобы он обрабатывался атомарно,
1 ответ
Я исправил это, взяв предложение от главного ответа на этот вопрос и заморозив мой экземпляр класса перед тем, как передать его 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 от попыток изменить объект.