Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么是';获取';在这个MobX示例中是必需的_Javascript_Mobx - Fatal编程技术网

Javascript 为什么是';获取';在这个MobX示例中是必需的

Javascript 为什么是';获取';在这个MobX示例中是必需的,javascript,mobx,Javascript,Mobx,在一个示例的一部分中,一个名为report的属性使用getter语法 class ObservableTodoStore { @observable todos = []; @observable pendingRequests = 0; constructor() { mobx.autorun(() => console.log(this.report)); } @computed get completedTodosCount() { return this.to

在一个示例的一部分中,一个名为report的属性使用getter语法

class ObservableTodoStore {
@observable todos = [];
@observable pendingRequests = 0;

constructor() {
    mobx.autorun(() => console.log(this.report));
}

@computed 
get completedTodosCount() {
    return this.todos.filter(
        todo => todo.completed === true
    ).length;
}

@computed 
get report() {
    if (this.todos.length === 0)
        return "<none>";
    return `Next todo: "${this.todos[0].task}". ` +
        `Progress: ${this.completedTodosCount}/${this.todos.length}`;
}

addTodo(task) {
    this.todos.push({
        task: task,
        completed: false,
        assignee: null
    });
}
}

const observableTodoStore = new ObservableTodoStore();

observableTodoStore.addTodo("read MobX tutorial");
observableTodoStore.addTodo("try MobX");
observableTodoStore.todos[0].completed = true;
observableTodoStore.todos[1].task = "try MobX in own project";
observableTodoStore.todos[0].task = "grok MobX tutorial";

// Next todo: "read MobX tutorial". Progress: 0/1
// Next todo: "read MobX tutorial". Progress: 0/2
// Next todo: "read MobX tutorial". Progress: 1/2
// Next todo: "grok MobX tutorial". Progress: 1/2
然后更改对该报告的调用,以反映它不再是一个getter

constructor() {
    mobx.autorun(() => console.log(this.report()));
}
然后我仍然得到一个控制台输出。然而,这是非常不同的

// Next todo: "grok MobX tutorial". Progress: 1/7
// Next todo: "grok MobX tutorial". Progress: 1/8

为什么结果如此不同?我认为使用getter更像是一种风格选择。

您需要将
get
@computed
装饰器结合使用

该文件适用于以下国家:

如果已启用装饰器,则可以在上使用
@computed
装饰器 声明式创建的类属性的任何getter 财产


谢谢你的回复。所以这是一个MobX的东西。你知道我为什么还有两行输出吗?事实上,在我最后的评论中,请不要再提这个问题。我认为出现额外的行是因为运行示例的页面正在记住以前的运行。干杯
// Next todo: "grok MobX tutorial". Progress: 1/7
// Next todo: "grok MobX tutorial". Progress: 1/8