Как связать this
с transform-decorators-legacy
плагином Babel? Например, у меня есть простой декоратор. Декоратор работает, но this
не определен в методе компонента.
fucntion myDecorator(target, name, descriptor) {
var oldValue = descriptor.value;
descriptor.value = function() {
...// Doing some stuff here I need the decorator for
...// (for example logging on every method call)
return oldValue.apply(null, arguments);
};
return descriptor;
}
class MyClass extends React.Component {
@myDecorator
myMethod() {
...// this.props... is unavailable here(`this` is undefined)
}
}
Если я попытаюсь использовать @myDecorator с некоторыми @autobind декораторов я получаю TypeError: Invalid property descriptor. Cannot both specify accessors and a value or writable attribute
, потому что
Дескриптор данных - это свойство, имеющее значение, которое может быть, а может и не быть доступным для записи. Дескриптор доступа - это свойство, описываемое парой функций геттер-сеттер. Дескриптор должен быть одной из этих двух разновидностей; не может быть и того, и другого.
В моем примере я не могу использовать value()
и get()
.
Привязка в конструкторе (this.myMethod = thid.myMethod.bind(this)
) тоже не кажется полезной, потому что вы привязываете недекорированный метод.