Các thành phần web với stear.js - đó có phải là cách tốt nhất để tạo các thành phần UI có thể sử dụng lại trong năm 2018?

Khả năng phát triển các yếu tố UI bất khả tri, khung và thư viện có thể được chia sẻ giữa các dự án và nhóm khác nhau dường như là liều thuốc hoàn hảo cho ít nhất một phần của cái mà chúng ta gọi là một cuộc hỗn chiến trong thế giới hiện đại. Kể từ khi tôi bắt đầu làm việc như một nhà phát triển web, tôi đã chứng kiến ​​một số yếu tố và tương tác có thể được trừu tượng hóa thành một mã có thể sử dụng lại, nhưng sự khác biệt giữa các khung và chi tiết triển khai của chúng khiến cho các thành phần Web của nó trở nên cồng kềnh.

Nhưng chờ đã, các thành phần web là gì?

Các thành phần Web là một bộ các công nghệ khác nhau cho phép bạn tạo các thành phần giao diện người dùng tùy chỉnh có thể sử dụng lại - với chức năng của chúng được gói gọn khỏi phần còn lại của mã - và sử dụng chúng trong các ứng dụng web của bạn.
https://developer.mozilla.org/en-US/docs/Web/Web_Components

Hàng triệu người trên thế giới đã sử dụng công nghệ này mỗi ngày. Năm ngoái, trang web phổ biến thứ hai, youtube.com, dựa trên các Thành phần Web. Ngay cả tab Lịch sử trong Chrome cũng được viết bằng Polyme, thư viện Cấu phần Web! Theo Wikipedia, lần đầu tiên các Thành phần Web được giới thiệu bởi Alex Russell tại Hội nghị Fronteer 2011.

Một vài lời về công nghệ liên quan

Bóng DOM

Đóng gói có lẽ là chìa khóa thành công khi nghĩ đến việc tạo ra các yếu tố có thể sử dụng lại - việc có thể tách biệt các đánh dấu, kiểu dáng và chi tiết triển khai khỏi phần còn lại của tài liệu là điều khiến ý tưởng về Thành phần Web trở nên hấp dẫn. API Shadow DOM thực hiện thủ thuật. Trình duyệt API API của API, là thứ cho phép bạn tạo ra cây con có phạm vi trong phần tử DOM.

Bạn có thể ảnh hưởng đến các nút trong DOM bóng theo cách chính xác giống như các nút không bóng - ví dụ: nối thêm các con hoặc cài đặt các thuộc tính, tạo kiểu cho các nút riêng lẻ bằng cách sử dụng Element.style.foo hoặc thêm kiểu vào toàn bộ cây DOM bóng trong < phong cách> yếu tố. Sự khác biệt là không có mã nào trong DOM bóng sẽ ảnh hưởng đến mọi thứ bên ngoài nó, cho phép đóng gói tiện dụng.
https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM

Shadow DOM có hai chế độ: mở và đóng. Chế độ đóng của Shadow DOM cung cấp cho các tác giả thành phần quyền kiểm soát cách thức Shadow Root của thành phần của họ được hiển thị thông qua js. Bạn có thể đọc thêm về bóng DOM ở đây.

Tạo kiểu

Các kiểu trong Shadow DOM nằm trong phạm vi và không bị rò rỉ. CSS toàn cầu sẽ ảnh hưởng đến các phần tử Shadow DOM giống như bất kỳ phần tử html nào khác - bằng cách kế thừa các thuộc tính, do đó, việc thiết lập họ phông chữ sẽ được kế thừa bởi thành phần phạm vi tùy chỉnh. Cài đặt kiểu thành * cũng sẽ ảnh hưởng đến phần tử gốc Shadow DOM, vì nó ảnh hưởng đến tất cả các phần tử. Nếu bạn muốn cho phép người dùng thành phần của bạn định kiểu thành phần, bạn nên sử dụng các thuộc tính CSS tùy chỉnh.

Yếu tố tùy chỉnh

Với các yếu tố tùy chỉnh, chúng tôi có thể tạo các thẻ html tùy chỉnh hoặc nâng cao các thành phần và thẻ hiện có. Nhờ công nghệ này, các thành phần web sẽ trông giống như các thẻ html thông thường, ví dụ .

Thư viện để làm việc với các thành phần web

Tất nhiên, việc tạo các Thành phần Web bằng vanilla js là có thể (chúng ta cần nhớ về polyfilling cho các trình duyệt không hỗ trợ các công nghệ cần thiết), nhưng viết các thành phần với js đơn giản có thể khó và cần nhiều mã soạn sẵn. Đây là nơi các thư viện thành phần web có ích. Bạn không cần chúng, nhưng cố gắng tạo các Thành phần Web sẵn sàng sản xuất sẽ bớt đau đớn hơn khi sử dụng một trong số chúng.

Polyme

Đây là thư viện Thành phần Web phổ biến nhất, được Google tạo và sử dụng nhiều. Nó cung cấp API đơn giản để tạo các thành phần. Phiên bản 3.0, sẽ được phát hành trong năm nay sẽ sử dụng lit-html, đó có vẻ là cách hay để tạo html trong js.

Skate.js

Skate.js tuyên bố là một sự trừu tượng hóa chức năng đối với các tiêu chuẩn Thành phần Web. Phần thú vị là nó cho phép bạn sử dụng nhiều thư viện xem, bao gồm lit-html, preact và thậm chí là phản ứng.

Stt.js

Macintosh.js là trình biên dịch Thành phần Web tương đối mới được tạo bởi nhóm Ionic. Nó lấy các khái niệm phát triển web hiện đại phổ biến (như Virtual DOM, kết xuất không đồng bộ, luồng sự kiện phản ứng và TSX) và tạo mã thành phần web dựa trên tiêu chuẩn sạch.

Tạo các thành phần web với stear.js

Tôi muốn nói với bạn một chút nữa về việc tạo các Thành phần Web bằng stt.js. Tại sao tôi chọn thư viện này? Chủ yếu là do hỗ trợ Bản mô tả tích hợp và sử dụng các mẫu phản ứng mà tôi quen thuộc với kinh nghiệm Angular và React của tôi, và tất nhiên là cách tiếp cận stprint-is-not-a-framework. Macintosh.js tuyên bố chỉ là trình biên dịch Thành phần Web và các thành phần được tạo là vanilla js - nhỏ và nhanh, ngoài ra chúng có thể được nhập bằng thẻ