Javascript Vuex状态不会被通用函数突变,而专用函数会对其进行突变
我有一个由LokiJS提供的存储,我使用它通过Javascript Vuex状态不会被通用函数突变,而专用函数会对其进行突变,javascript,vue.js,vuejs2,vuex,lokijs,Javascript,Vue.js,Vuejs2,Vuex,Lokijs,我有一个由LokiJS提供的存储,我使用它通过autoloadCallback中的突变来更新Vuex状态 LokIJS存储: var db = new loki('mydatabase', { autoupdate: true, autoload: true, autoloadCallback: setupHandler }) Vuex状态和突变: const state = { ads: [] } const mutations = { updateArray(from
autoloadCallback
中的突变来更新Vuex状态
LokIJS存储:
var db = new loki('mydatabase', {
autoupdate: true,
autoload: true,
autoloadCallback: setupHandler
})
Vuex状态和突变:
const state = {
ads: []
}
const mutations = {
updateArray(from, to) {
from = to
},
updateAds() {
state.ads = db.getCollection('ads').data
}
}
以及回调本身:
function setupHandler() {
setupCollection('ads') // Just sets up the collection if it doesn't exist
db.getCollection('ads').insert({dummy: "Dummmy!"})
mutations.updateArray(state.ads, db.getCollection('ads').data)
mutations.updateAds()
}
这里的问题是调用updateArray(state.ads,content)
不会将state.ads
更改为content
,但本质上做相同事情的updateAds()
函数不接受参数并将其硬编码,不会相应地更改状态。ads
我编写一个通用函数到updateArray的方法的根本问题是什么?有办法吗
下面是这种行为的一个例子。在不知道loki的具体情况下,我认为您需要进行以下更改 您的突变应该如下所示:
const mutations = {
updateArray(state, to) {
state.ads = to
}
}
function setupHandler() {
setupCollection('ads')
db.getCollection('ads').insert({dummy: "Dummmy!"})
store.commit('updateArray', db.getCollection('ads').data)
}
您的setupHandler函数应该如下所示:
const mutations = {
updateArray(state, to) {
state.ads = to
}
}
function setupHandler() {
setupCollection('ads')
db.getCollection('ads').insert({dummy: "Dummmy!"})
store.commit('updateArray', db.getCollection('ads').data)
}
突变是接受状态作为第一个参数的函数,以及包含参数作为第二个参数的对象参数。应使用存储的commit
方法提交突变
这是您的。您不能像在
updateArray
中那样直接替换状态,其中from
实际上就是状态。如果要替换完整状态,需要使用store实例的replaceState
方法。此外,您并没有真正按照预期使用Vuex。突变旨在接收状态对象,突变应通过存储提交。@Bert:但我不想替换整个状态。我在这个州有很多数组(只是为了简化它而精简了它),我只需要更新非常特定的数组。有办法吗?@Bert:我正在使用它,就像你在组件中描述的那样,但是,我需要先从LokiJS数据库加载数据。有没有一种惯用的方法可以做到这一点?正如我在下面展示的那样,您可以在存储上调用方法,而无需使用this.$store
,您只需要对存储对象进行引用。因此,在组件外部,您将以与组件内部相同的方式进行操作,这只是如何到达存储的问题。通常,您导出存储对象,然后在需要的地方导入它。