github / github/auto-complete-element
Use abortcontroller to simplify connectedCallback
- Ngôn ngữ chính
- JavaScript
- Star
- 407
- Fork
- 57
- Merge trung bình
- 1 ngày 7 giờ
- Pull request đã merge (30 ngày)
- 5
Mô tả
Per https://github.com/github/auto-complete-element/pull/53#discussion_r761014561, we register many event handlers like `addEventlistener('foo', this.bar = this.bar.bind(bar))`, but rather than calling function bind we can use `handleEvent` and rather than calling `removeEventListener` a bunch, we can store an abort controller per-instance (e.g. with a private field) and abort during `disconnectedCallback`.
The pattern would look as follows:
```ts
class MyElement extends HTMElement {
#ctl = new AbortController()
connectedCallback() {
this.input.addEventListener('foo', this, { signal: this.#ctl.signal })
// many more events here...
}
handleEvent(event) {
if (event.type === 'foo' && event.currentTarget === this.input) {
// do things
}
}
disconnectedCallback() {
this.#ctl.abort()
}
}
```
Hướng dẫn đóng góp
Hướng nghiên cứu
Tìm connectedCallback của custom element và phần thiết lập event listener hiện có, sau đó kiểm tra disconnectedCallback của nó cùng các handler hiện đang được liên kết hoặc gỡ bỏ riêng lẻ. Thay thế phần wiring vòng đời đó bằng handleEvent và một AbortController của instance như mô tả, rồi xác minh rằng các listener được đăng ký và dọn dẹp đúng cách khi element bị ngắt kết nối.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- javascript
- Lĩnh vực
- frontend
- Loại issue
- Tái cấu trúc
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 45/100