我试图在 Vuex 中存储一个类的实例(EditorState https://prosemirror.net/docs/ref/#state.EditorState来自散文镜)。这个类从外部来看或多或少是不可变的,这意味着每当我想对其进行更改时,我只需将该类的一个新实例放入 Vuex 中即可。
因此,我在这里不需要 Vue 的更改跟踪,事实上它实际上似乎干扰了 ProseMirror 的内部工作,所以我想知道是否有一种方法可以将我的对象与 Vue 隔离,以便以原子方式处理它。
我通过采纳最佳答案中的建议来解决这个问题这个问题 https://stackoverflow.com/a/44307531/3508956并在将其交给 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"
});
Since Object.freeze https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze不是递归的,这对 ProseMirror 的内部工作没有任何影响,但它阻止 Vue 尝试修改对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)