装饰器可以用于ES7环境或者TypeScript中,以使类属性转变为可观察的。 @observable 可用于实例字段和属性getters。 这为你的普通对象转变为可观察对象提供了细粒度的方法
import {observable} from "MobX";
class OrderLine {
@observable price = 0;
@observable amount = 1;
constructor(price) {
this.price = price;
}
@computed get total() {
return this.price * this.amount;
}
}
如果你的环境不支持装饰器或者字段初始化,@observable key = value;
只是 extendObservable(this, { key: value })
的一个语法糖,你可以使用 extendObservable
方法。
可枚举性:@observable
装饰过的属性是可枚举的,但是这个属性是定义在类声明上的,而非实例上。
换句话说:
const line = new OrderLine();
console.log("price" in line); // true
console.log(line.hasOwnProperty("price")); // false, price _属性_ 是定义在类声明上的, 即使每个实例都存储有自己的值.
@observable
装饰器可以和 asStructure
之类的修饰符一起使用
@observable position = asStructure({ x: 0, y: 0})
装饰器语法默认是不被支持的。
--experimentalDecorators
这一构建工具标记,并在 tsconfig.json
中将 experimentalDecorators
设置为 true
(推荐)。--stage 0
传给了Babel CLI