class UserStore {
@observable rules = {
data:[],
isFeatching: false,
error:false,
};
@observable rooms = {
data:[],
isFeatching: false,
error:false,
};
@observable money = {
data:[],
isFeatching: false,
error:false,
};
@action
async getRules() {
try {
this.rules.isFeatching = true;
const data = await api.getRules();
this.rules.isFeatching = false;
}
}
@action
async getRooms() {
try {
this.rooms.isFeatching = true;
const data = await api.getRooms();
this.rooms.isFeatching = false;
}
}
@action
async getMoney() {
try {
this.money.isFeatching = true;
const data = await api.getMoney();
this.money.isFeatching = false;
}
}
}
请帮助我。
问题的条件: 1)我需要在一个商店中获取三种类型的数据。
任务目标: 1)如何使其自动放置“ isFeatching”? 有什么办法可以自动化?
我有以下想法: 创建一个全局数组(或将从中继承的类):
const globalManagerFetching = {UserStore: {
getRules: {isFeatching:false}
getRooms: {isFeatching:false}
getMoney: {isFeatching:false}
}
但是怎么做呢? 如何获得名称动作?
我的伪代码:
@action
async getMoney() {
const methoneName = 'getMoney'; // how to get it automatically?
try {
globalManagerFetching[this.constructor.name][methoneName] = false;
const data = await api.getMoney();
globalManagerFetching[this.constructor.name][methoneName] = true;
}
}
我的其他伪代码:
@action
async getMoney() {
try {
setFetching(true);//how to do this?
const data = await api.getMoney();
setFetching(false);//how to do this?
}
}
请告诉我。 对不起,英语不好
答案 0 :(得分:1)
如果我正确理解您的问题的上下文,则希望避免代码重复。我建议通过以下方式重组代码来解决您的问题:
const { getRules, getRooms, getMoney} = api;
class UserStoreResource {
@observable data = [];
@observable isFetching = false;
@observable error;
constructor(fetchFunction) {
this.fetchData = async ( ) => {
this.isFetching = ture;
await fetchFunction();
this.isFetching = false;
}
}
}
class UserStore {
rules = new UserStoreResource(getRules);
rooms = new UserStoreResource(getRooms);
money = new UserStoreResource(getMoney);
@action
async fetchAllData() {
try {
await Promise.all([
this.rules.fetchData(),
this.rooms.fetchData(),
this.money.fetchData(),
])
}
}
}
如果在组件中您将使用UserStoreResource中的任何可观察对象-您将获得正确的重新呈现。
回答有关获取函数名称的问题-可以通过请求属性arguments.callee.name
来解决这个问题-但这是不建议使用的功能。 More here。最重要的是-如果需要此属性-这表明代码需要重组。
答案 1 :(得分:0)
您可以获得这样的函数名称
a = sf.Parameter('a',1,0,2) #name, initial value, minimum, maximum
a = sf.Parameter('a', value=1, min=0, max=2)