gpt4 book ai didi

javascript - 在 Vuex 中存储 Fabric.js Canvas 引用 - [vuex] 不要在突变处理程序之外改变 vuex 存储状态

转载 作者:行者123 更新时间:2023-12-04 17:27:56 29 4
gpt4 key购买 nike

我正在创建一个使用 Fabric.js 来管理 Canvas 的 Vue 应用程序。

我想使用 Vuex 管理 Canvas 状态。为此,我将 fabric canvas 实例设置为 vuex 状态变量。

突变

setCanvas(state, canv) {
state.canvas = canv
}

在 Vue 组件中

const canvas = new fabric.Canvas('main-canvas')
this.setCanvas(canvas) //commit the mutation

在另一个变化中,我必须向 Canvas 添加一个对象:

addLayer(state, layer) {
state.canvas.add(layer)
}

运行这个突变时我得到以下错误:

[vuex] do not mutate Vuex store state outside mutation handlers.

我认为原因是fabric js实例本身在编辑 Prop 。而 vuex 似乎并不喜欢这样。

对于这个问题,存储结构对象的最佳方法是什么?或者有更好的解决方法吗?

最佳答案

将它存储在 vuex 中并不理想,我知道你为什么要这样做。可能是因为您的应用程序周围的多个组件想要调用 Canvas 方法。

它似乎将它的副本存储在已触发的事件上并更改对象,这在技术上是突变处理程序之外的突变。

尝试在一个组件中处理与 Canvas 初始化有关的所有事情(在“mounted”方法中),然后您可以使用 Vuex 状态的监视来检测诸如何时按下添加圆圈的按钮,然后您可以在该组件中对其使用react。至少我是这样处理类似案件的。如果我找到更好的方法,会更新这个。

此外,如果您找到更好的方法,请分享。

关于javascript - 在 Vuex 中存储 Fabric.js Canvas 引用 - [vuex] 不要在突变处理程序之外改变 vuex 存储状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62214504/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com