Javascript 在Vuex突变中使用“Vue.nextTick”是否违反惯例?它会弄坏什么东西吗?

Javascript 在Vuex突变中使用“Vue.nextTick”是否违反惯例?它会弄坏什么东西吗?,javascript,vue.js,vuex,Javascript,Vue.js,Vuex,据我所知,Vuex的突变应该是同步的Vuex.nextTick最终将是异步的。那么,在变异中使用它是否违反了惯例?它能弄坏什么东西吗? 我尝试过这样做,它似乎工作得很好,但我并没有尝试使用开发工具回到以前的状态 只是想让您知道:我使用nextTick来推迟一些排序,以避免不必要的多次排序。也许你有别的解决办法?我知道我可以用一个动作代替一个突变,但我想把我已经有的一些动作改成突变,因为这对我来说似乎是一个更好的选择,但他们使用了这段代码。在突变中使用nextTick有效地将代码移到突变之外,因此

据我所知,Vuex的突变应该是同步的<如果我理解正确,code>Vuex.nextTick最终将是异步的。那么,在变异中使用它是否违反了惯例?它能弄坏什么东西吗? 我尝试过这样做,它似乎工作得很好,但我并没有尝试使用开发工具回到以前的状态


只是想让您知道:我使用
nextTick
来推迟一些排序,以避免不必要的多次排序。也许你有别的解决办法?我知道我可以用一个动作代替一个突变,但我想把我已经有的一些动作改成突变,因为这对我来说似乎是一个更好的选择,但他们使用了这段代码。

在突变中使用
nextTick
有效地将代码移到突变之外,因此,在严格模式下会出现错误,而Devtools无法跟踪更改

另外,
nextTick
在下一轮渲染之后才会运行,因此您将进行多次渲染


如果可能的话,对排序列表使用getter。

你的直觉看起来是正确的,在一个变种中调用异步代码似乎很奇怪。为什么对此使用操作不是您的解决方案?这将是这种把戏的最好主意…谢谢你的评论。我已经为此使用了一些操作,但我想把它们变成突变。也许我可以拆分代码,将其中的一些部分移动到突变中,并将这一部分作为动作。我必须检查一下这是否可行。但是,如果作为一个动作它可以正常工作,为什么要转移到突变呢?如果这是一个清晰的原因,当然你可以把它分成多个动作/突变。但是异步部分应该保留在操作中!:)@Kapcash,清晰是一个原因,但我也在思考未来基于突变撤销或重做某些更改的能力。不过谢谢。:)谢谢你的回答。我曾想过使用getter,但它似乎被多次调用,即使是在不必要的时候。这就是为什么我决定引入手动调用进行排序,并将排序后的列表保持在
状态
。也许有办法避免不必要的getter呼叫?或者一些介于两者之间的解决方案,比如需要一个变量
排序
?我考虑过使用一些
watch
,但据我所知,Vuex本身或定义存储时没有类似的功能,我必须在某些组件或“main.js”中使用它。@kcpr
getter
的工作方式与
computed
属性类似。一旦依赖项发生更改,缓存的值将立即失效,但计算新值是延迟的,并且只有在尝试使用该值时才会发生。一个潜在的问题是,如果没有什么重要的改变,它可能会失效,也许这就是你的问题所在。在极端情况下,涉及
排序所需的
属性和观察者的欺骗可能是合法的方法。CompositionAPI使这稍微容易一些。