Giới thiệu về Thành phần Web
Thành phần web là một tập hợp các API được tiêu chuẩn hóa cho phép các nhà phát triển tạo các thành phần mô-đun và có thể tái sử dụng cho các ứng dụng web. Các thành phần này có thể được sử dụng trong bất kỳ ứng dụng web hiện đại nào, bất kể khung hoặc thư viện đang được sử dụng.
Các Thành phần Web được tạo thành từ bốn API chính:
- Các yếu tố tùy chỉnh: API này cho phép các nhà phát triển xác định các thẻ HTML của riêng họ, có thể được sử dụng trong bất kỳ ứng dụng web nào. Phần tử tùy chỉnh được tạo bằng các lớp JavaScript mở rộng
HTMLElementlớp và xác định hành vi cũng như hình thức của phần tử tùy chỉnh. - Shadow DOM: API này cho phép các nhà phát triển tạo một cây DOM riêng cho một thành phần web, được tách biệt khỏi cây DOM chính của ứng dụng. Sự cô lập này giúp cho việc bảo trì và tạo kiểu cho thành phần trở nên dễ dàng hơn vì bất kỳ thay đổi nào đối với Shadow DOM sẽ không ảnh hưởng đến phần còn lại của ứng dụng.
- Mẫu HTML: API này cho phép nhà phát triển xác định các mẫu HTML có thể được sử dụng để tạo các phiên bản có cùng nội dung. Mẫu có thể được sử dụng để tạo các phần nội dung có thể tái sử dụng, chẳng hạn như menu hoặc danh sách và có thể được khởi tạo bằng JavaScript.
- Nhập HTML: API này cho phép nhà phát triển đưa các thành phần web vào ứng dụng của họ bằng cách nhập chúng từ các tệp hoặc URL bên ngoài. Điều này giúp việc sử dụng lại các thành phần trên các ứng dụng khác nhau trở nên dễ dàng hơn vì chúng có thể được nhập và sử dụng giống như bất kỳ thành phần HTML nào khác.
Tạo thành phần web
Để sử dụng Thành phần web trong ứng dụng web, bạn sẽ cần tạo các thành phần tùy chỉnh của riêng mình bằng cách sử dụng API Thành phần tùy chỉnh. Sau đó, bạn có thể sử dụng các phần tử tùy chỉnh trong HTML của mình giống như bất kỳ phần tử HTML nào khác.
Dưới đây là một ví dụ về cách bạn có thể sử dụng các API này để tạo một thành phần đơn giản có thể tái sử dụng:
<template id="my-component-template">
<style>
/* Add some styling for our component */
.my-component {
display: flex;
align-items: center;
justify-content: center;
background-color: #eee;
border: 1px solid #ccc;
border-radius: 5px;
padding: 20px;
}
</style>
<div class="my-component">
<slot></slot>
</div>
</template>
<script>
// Define our custom element
class MyComponent extends HTMLElement {
constructor() {
super();
// Attach the shadow root to our element
this.attachShadow({ mode: "open" });
// Import the template content into the shadow root
const template = document.querySelector("#my-component-template");
const instance = template.content.cloneNode(true);
this.shadowRoot.appendChild(instance);
}
}
// Register our custom element
customElements.define("my-component", MyComponent);
</script>
<my-component>Hello, World!</my-component>
<my-component color="#f00">Hello, World!</my-component>
<script>
class MyComponent extends HTMLElement {
constructor() {
super();
// ...
// Get the color attribute
const color = this.getAttribute("color");
// Use the attribute to set the background color of the component
this.shadowRoot.querySelector(".my-component").style.backgroundColor = color;
}
}
</script>
Để tạo và sử dụng các thành phần web dễ dàng hơn, một số khung đã được phát triển để cung cấp chức năng bổ sung và đơn giản hóa quy trình phát triển. Một trong những khung này là LitElement.
LitElement là một khung thành phần web nhẹ, hiệu suất cao được xây dựng dựa trên các API thành phần web. Nó cung cấp một API đơn giản và rõ ràng để tạo các thành phần web và bao gồm các tính năng như hiển thị hiệu quả, quan sát thuộc tính và xử lý sự kiện.
Một trong những tính năng chính của LitElement là việc sử dụng một renderphương thức, cho phép các nhà phát triển mô tả một cách khai báo mẫu của thành phần bằng JavaScript. Điều này giúp dễ dàng tạo và cập nhật cấu trúc DOM của thành phần, đồng thời loại bỏ nhu cầu sử dụng logic JavaScript phức tạp để thao tác DOM.
Đây là một ví dụ về cách bạn có thể sử dụng LitElement để tạo một thành phần web đơn giản:
import { LitElement, html } from 'lit-element';
class MyComponent extends LitElement {
static get properties() {
return {
message: { type: String }
};
}
render() {
return html`
<p>${this.message}</p>
`;
}
}
customElements.define('my-component', MyComponent);
LitElement cũng cung cấp một bộ tính năng mạnh mẽ để xử lý thuộc tính và xử lý sự kiện, với các phương thức vòng đời updated()và shouldUpdate(), cho phép bạn cập nhật thành phần một cách có điều kiện dựa trên các thuộc tính và trình xử lý sự kiện như @clickhoặc @input.
tạo kiểu
Việc tạo kiểu cho các thành phần web có thể hơi phức tạp do cách Shadow DOM gói gọn các kiểu của thành phần. Tuy nhiên, với các kỹ thuật phù hợp, bạn có thể tạo các kiểu đẹp và nhất quán cho các thành phần của mình.
Một trong những tính năng chính của Shadow DOM là nó gói gọn các kiểu của một thành phần web để chúng không ảnh hưởng đến phần còn lại của trang. Điều này rất tốt để ngăn xung đột kiểu và giữ kiểu thành phần của bạn tách biệt với phần còn lại của ứng dụng, nhưng điều đó cũng có nghĩa là kiểu được xác định trong mẫu của thành phần sẽ không hiển thị bên ngoài thành phần.
Để tạo kiểu cho một thành phần web, bạn có một số tùy chọn:
- Kiểu nội tuyến : Bạn có thể thêm kiểu trực tiếp vào mẫu của thành phần bằng cách sử dụng
stylethẻ. Đây là một tùy chọn tốt cho các thành phần đơn giản hoặc để thêm một lượng nhỏ kiểu dáng tùy chỉnh vào một thành phần.
<template>
<style>
/* Define CSS classes for component */
.my-component {
background-color: #eee;
}
.my-component.highlight {
background-color: #f00;
}
</style>
<div class="my-component">...</div>
</template>
const component = document.querySelector('.my-component');
component.classList.add('highlight');
my-component:host {
--component-bg-color: blue;
}
<link rel="stylesheet" href="my-component.css">h
:host .my-component {
background-color: #eee;
}
Việc tạo một thành phần web liên quan đến việc sử dụng Phần tử tùy chỉnh, Shadow DOM, Mẫu HTML và API nhập HTML để xác định và nhập HTML, CSS và JavaScript của thành phần. Với các API này, nhà phát triển có thể tạo các phần tử HTML mới và xác định hành vi của chúng, gói gọn các kiểu của chúng và sử dụng lại các mẫu HTML cũng như các tài nguyên khác trên nhiều thành phần.
Khi nói đến việc tạo kiểu cho các thành phần web, có sẵn một số tùy chọn khác nhau. Các nhà phát triển có thể sử dụng các kiểu nội tuyến, biểu định kiểu bên ngoài để tạo kiểu cho các thành phần của họ, tùy thuộc vào nhu cầu của họ. Ngoài ra, các nhà phát triển có thể sử dụng các khung CSS để duy trì tính nhất quán trong ứng dụng.
Nhìn chung, các thành phần web cung cấp một cách mạnh mẽ và linh hoạt để tạo các thành phần giao diện người dùng mô-đun và có thể tái sử dụng cho web, đồng thời với các kỹ thuật phù hợp, các nhà phát triển có thể tạo các kiểu đẹp và nhất quán cho các thành phần của họ.
Cảm ơn bạn đã đọc! Nếu bạn thấy bài đăng này hữu ích, bạn có thể theo dõi tôi trên Twitter để biết thêm thông tin chi tiết kỹ thuật và cập nhật về phát triển web.

![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































