我有多个mobx商店,发现自己在每个商店都有几乎相同的动作。因此,我希望能够在商店之间进行概括和重用。下面,我试图突破创建动作,希望能够将其导入到多个商店,但是由于self不可用,因此无法正常工作。
我想从这里出发:
export const CategoriesStore = types
.model("CategoriesStore", {
})
.views(self => ({
}))
.actions(self => {
const collection = "categories"
const create = flow(function* create(newItem) {
const newItemRef = firestore.collection(collection).doc()
const id = newItemRef.id
self[collection].set(id, newItem)
yield newItemRef.set(newItem)
return id
})
return {
create
}
})
对于这样的情况,可以在其他商店中重用create动作:
const create = flow(function* create(newItem, collection) {
const newItemRef = firestore.collection(collection).doc()
const id = newItemRef.id
this[collection].set(id, newItem)
yield newItemRef.set(newItem)
return id
})
export const CategoriesStore = types
.model("CategoriesStore", {
})
.views(self => ({
}))
.actions(self => {
const collection = "categories"
const _create = create.bind(self)
return {
_create
}
})
关于如何实现这一目标的任何想法?
答案 0 :(得分:1)
虽然我从来没有做过这样的事情,但是我一直在思考,并认为它应该可以工作。但是,如果没有,您可以执行以下操作:
const create = (self) => flow(function* create(newItem, collection) {
const newItemRef = firestore.collection(collection).doc()
const id = newItemRef.id
self[collection].set(id, newItem)
yield newItemRef.set(newItem)
return id
})
export const CategoriesStore = types
.model("CategoriesStore", {
})
.views(self => ({
}))
.actions(self => {
const collection = "categories"
return {
create: create(self)
}
})
这肯定应该起作用。