![](/img/trans.png)
[英]Preventing ESLint “no-undef” on ReactJS arrow-function class properties
[英]Class properties are giving no-undef
我正在嘗試在 ReactJS 中制作非組件 class。 我在 JavaScript 上關注的大多數教程都表明,當您制作 class 時,您只需使用this.[name]
指定它們即可創建屬性。
有些東西真的不喜歡這樣,它給我的屬性拋出了一個no-undef
錯誤。
這是有問題的代碼:
class MicroBitConnection {
constructor(device) {
this.device = device;
this.connectDAP();
}
connectDAP() {
this.transport = new DAPjs.WebUSB(device);
this.dap = new DAPjs.DAPLink(transport);
}
}
現在我什至沒有在任何地方實例化 class,它立即給了我這個錯誤:
Line 11:43: 'device' is not defined no-undef
Line 12:44: 'transport' is not defined no-undef
這似乎不是一個 linting 問題,因為即使在文件頂部使用/* eslint no-undef: 0 */ // --> OFF
此警告,實際運行在某處實例化 class 的代碼也會給出同樣的錯誤:
Error: ReferenceError: device is not defined
在您的connectDAP
方法中,您引用了未定義的變量device
和transport
。 您可能希望使用在實例this
上定義的屬性:
class MicroBitConnection {
constructor(device) {
this.device = device;
this.connectDAP();
}
connectDAP() {
this.transport = new DAPjs.WebUSB(this.device);
this.dap = new DAPjs.DAPLink(this.transport);
}
}
另請注意, this
不會自動綁定到實例,例如當使用實例方法作為事件處理程序時。 要確保它在所有情況下都綁定到實例,請在構造函數中調用Function.prototype.bind
:
this.connectDAP = this.connectDAP.bind(this);
如果你想省略this
,你需要在本地聲明變量,這可以很容易地使用解構來完成:
class MicroBitConnection {
constructor(device) {
this.device = device;
this.connectDAP();
}
connectDAP() {
const { device } = this;
this.transport = new DAPjs.WebUSB(device);
const { transport } = this;
this.dap = new DAPjs.DAPLink(transport);
}
}
第三種選擇(不推薦)是使用with
語句:
class MicroBitConnection {
constructor(device) {
this.device = device;
this.transport = null;
this.dap = null;
this.connectDAP();
}
connectDAP() {
with (this) {
transport = new DAPjs.WebUSB(device);
dap = new DAPjs.DAPLink(transport);
}
}
}
我不確定最后一個版本是否符合您的期望,只是為了完整起見將其列出並讓您知道with
語句的存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.