- vừa được xem lúc

Tại sao có Higher Order Component (HOC) khi đã có Decorator pattern ?

0 0 10

Người đăng: Siêu Nhân Gao

Theo Viblo Asia

Trong TypeScript, có hai khái niệm quan trọng khi nói đến việc mở rộng chức năng của một component: Decorator và Higher Order Component (HOC).

1. Decorator trong TypeScript:

  • Decorators là một tính năng phổ biến của TypeScript, được sử dụng để thêm metadata cho một class, một biến hoặc một property.
  • Trong React, Decorators có thể sử dụng để mở rộng chức năng của một component, chẳng hạn như thêm event handler, thêm style hoặc thêm prop.
  • Sử dụng Decorators rất dễ dàng trong TypeScript. Chúng ta chỉ cần khai báo một hàm và truyền nó vào decorator function. Ví dụ:

function withStyle(WrappedComponent: React.ComponentType, style: object) { return (props) => { const styled = { style }; return ( <div {...props} {...styled}> <WrappedComponent {...props} /> </div> ); };
} @withStyle({ backgroundColor: 'lightblue' })
class MyComponent extends React.Component { render() { return <h1>Hello world!</h1>; }
}
  • Trong ví dụ trên, một decorator function withStyle được khai báo với WrappedComponent và style. Nó trả về một hàm mới với props của component gốc và các style được thêm vào. Decorator được sử dụng bằng cách thêm @withStyle() trước class MyComponent.

2. Higher Order Component (HOC) trong TypeScript:

  • Higher Order Component là một kỹ thuật cũng được sử dụng để mở rộng chức năng của một component trong React.
  • HOC được implement bằng cách truyền một component vào một hàm, và hàm sẽ trả về một component mới với các props mới được thêm vào.
  • Sử dụng HOC trong TypeScript cũng rất đơn giản. Chúng ta chỉ cần khai báo một hàm và truyền component vào. Ví dụ:

function withStyle(WrappedComponent: React.ComponentType, style: object) { return class extends React.Component { render() { const styled = { style }; return ( <div {...this.props} {...styled}> <WrappedComponent {...this.props} /> </div> ); } };
} const MyComponentWithStyle = withStyle(MyComponent, { backgroundColor: 'lightblue' });
  • Đoạn code trên sẽ tạo ra một HOC với MyComponent là WrappedComponent, và style được truyền vào. Component mới được tạo ra và gán vào MyComponentWithStyle.

3. Sự khác nhau giữa Decorator và Higher Order Component :

  1. Cú pháp: Decorator sử dụng cú pháp gắn trực tiếp trước class component, trong khi HOC sử dụng hàm để bọc class component.

  2. Phiên bản hỗ trợ: Decorator hiện chỉ hỗ trợ trong phiên bản TypeScript từ 3.0 trở đi, trong khi HOC có thể được sử dụng trong bất kỳ phiên bản TypeScript nào.

  3. Scope: Decorator chỉ ảnh hưởng đến class component đó, trong khi HOC có thể ảnh hưởng đến nhiều component khác nhau.

4. Khi nào nên dùng:

  1. Khi cần mở rộng chức năng của một component duy nhất: Trong trường hợp này, Decorator có thể là giải pháp tốt hơn do nó chỉ ảnh hưởng đến component được trang trí và không ảnh hưởng đến các component khác.

  2. Khi cần sử dụng chung chức năng giữa các component khác nhau: Trong trường hợp này, HOC có thể là giải pháp tốt hơn do nó có thể được sử dụng lại trên nhiều component khác nhau và có thể dễ dàng được customization cho từng component.

Tuy nhiên, nếu lập trình viên muốn sử dụng cả hai kỹ thuật này trong một project, thì Decorator có thể được sử dụng để mở rộng chức năng của một component đơn lẻ và HOC có thể được sử dụng để chia sẻ chức năng giữa các component khác nhau.

Tóm lại, sự khác nhau giữa Decorator và Higher Order Component còn tùy thuộc vào công dụng và nhu cầu của từng dự án. Lập trình viên cần phải thận trọng trong việc lựa chọn kỹ thuật phù hợp để tránh gây khó khăn trong việc bảo trì và phát triển phần mềm.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giải ngố về High Order Component trong ReactJS - (Phần 2 - HOC)

Mở đầu. Trong bài viết trước mình đã giới thiệu với tất cả mọi người về Currying function và để tiếp tục series bài viết tìm hiểu về High Order Component thì ngày hôm nay mình sẽ cùng mọi người tìm hiểu nốt về High Order Component, để xem nó là gì và có liên quan gì đến Currying function nhé.

0 0 37

- vừa được xem lúc

Higher Order Functional Component và Wrapper Component trong Reactjs

Lí do sử dụng. Trước khi đến với khái niệm về HOC chúng ta hay tìm hiểu xem lí do tại sao cần phải dùng đến nó.

0 0 31

- vừa được xem lúc

Những điều cần lưu ý và sử dụng Hook trong React (Phần 5)

V. Sử dụng useRef như thế nào cho đúng.

0 0 127

- vừa được xem lúc

7 Cách viết code React "clean" hơn

Mở đầu. Là nhà phát triển React, tất cả chúng ta đều muốn viết code sạch hơn, đơn giản hơn và dễ đọc hơn. 1. Sử dụng JSX shorthands.

0 0 188

- vừa được xem lúc

Create app covid-19 use Reactjs

Chào các bạn hôm nay mình sẽ chia sẻ với các bạn một app covid-19, để mọi người cùng tham khảo, tính năng của App này chỉ đơn giản là show số liệu về dịch Covid của các nước trên thế giới như: Số ngườ

0 0 39

- vừa được xem lúc

ReactJS Custom Hooks

ReactJS cung cấp rất nhiều cho bạn các hook mà bạn có thể sử dụng hằng ngày vào project của mình. Nhưng bên cạnh đó bạn có thể tự tạo ra các hook của riêng bạn để sử dụng, làm cho việc tối ưu hóa code

0 0 65