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

Khi nào nên dùng Optional Props và khi nào nên dùng Undefined trong TypeScript với React?

0 0 4

Người đăng: Vinh Phạm

Theo Viblo Asia

Khi làm việc với TypeScript trong React, một tình huống phổ biến thường xuất hiện liên quan đến việc định kiểu cho các props của component. Cụ thể, các lập trình viên thường đặt câu hỏi: Nên khai báo prop là prop?: Type hay prop: Type | undefined?

Việc hiểu rõ sự khác biệt giữa hai cách này có thể ảnh hưởng đáng kể đến độ rõ ràng, chất lượng mã nguồn và khả năng bảo trì của các component React.

Trong bài viết này, chúng ta sẽ cùng tìm hiểu hai cách tiếp cận này, khi nào nên dùng cái nào, và vì sao điều đó lại quan trọng với dự án của bạn.

Hiểu về Props trong TypeScript cho React

Trước khi đi vào các trường hợp sử dụng cụ thể giữa props tùy chọn (optional) và props có thể là undefined, điều quan trọng là phải hiểu rõ ý nghĩa của từng kiểu:

  • prop?: Type: Cú pháp này biểu thị rằng prop là tùy chọn. Component có thể hoạt động mà không cần prop đó. Nếu prop được truyền vào, nó phải tuân theo kiểu Type đã khai báo, mang lại lợi ích từ việc kiểm tra kiểu chặt chẽ trong khi vẫn giữ được tính linh hoạt.

  • prop: Type | undefined: Trong trường hợp này, prop là bắt buộc — nghĩa là bạn phải truyền nó mỗi khi sử dụng component. Tuy nhiên, giá trị của prop có thể là undefined, điều này đôi khi gây nhầm lẫn về việc liệu nó có thực sự cần thiết hay không trong từng hoàn cảnh.

Khi nào nên dùng prop?: Type

1. Props thực sự tùy chọn

Sử dụng khi bạn thật sự muốn prop đó là tùy chọn. Ví dụ, nếu component có thể hiển thị đầy đủ mà không cần một prop nhất định — như hiển thị hồ sơ người dùng mà không có ảnh đại diện — thì việc đánh dấu nó là tùy chọn sẽ tăng tính linh hoạt.

2. Props có giá trị mặc định

Nếu bạn dự định gán giá trị mặc định cho prop bằng defaultProps (hoặc trong destructuring), thì nên khai báo nó là tùy chọn.

// Example of an optional prop in a React component
import React from 'react'; interface UserProfileProps { name: string; avatarUrl?: string; // Optional prop
} const UserProfile: React.FC<UserProfileProps> = ({ name, avatarUrl }) => { return ( <div> <h1>{name}</h1> {avatarUrl ? <img src={avatarUrl} alt={name} /> : <p>No Avatar Found</p>} </div> );
};

Khi nào nên dùng prop: Type | undefined

1. Props quan trọng nhưng có thể chưa sẵn sàng

Mẫu này phù hợp hơn khi prop đóng vai trò quan trọng trong logic của component, nhưng trong một số giai đoạn nhất định (ví dụ: khi đang tải dữ liệu), nó có thể chưa được định nghĩa.

2. Trạng thái trung gian

Thích hợp khi prop không được phép thiếu nhưng có thể có giá trị là undefined trong quá trình khởi tạo hoặc khi đang fetch dữ liệu.

// Example of a required prop that can be undefined in a React component
import React from 'react'; interface UserDataProps { userId: string; userData: User | undefined; // Required prop that can be undefined
} const UserData: React.FC<UserDataProps> = ({ userId, userData }) => { if (!userData) { return <p>Loading user data...</p>; } return <div>{userData.name}</div>;
};

Các best practice khi định kiểu cho Props

1. Xem xét cách component được sử dụng

Đánh giá xem component của bạn có thể hoạt động mà không cần prop đó không. Nếu có, hãy dùng prop?: Type. Nếu prop luôn cần được truyền vào về mặt logic, hãy dùng prop: Type | undefined.

2. Xử lý undefined một cách rõ ràng

Nếu dùng prop: Type | undefined, hãy đảm bảo component xử lý tốt các tình huống khi prop là undefined để tránh lỗi khi chạy.

3. Ghi chú rõ ràng việc sử dụng prop

Trong các ứng dụng lớn, tài liệu rõ ràng là rất quan trọng. Hãy đánh dấu và giải thích rõ prop nào là tùy chọn hoặc có thể là undefined trong phần chú thích hoặc tài liệu đi kèm.

4. Giữ sự nhất quán trong nhóm phát triển

Để đảm bảo khả năng bảo trì, hãy thiết lập quy ước về cách sử dụng prop tùy chọn và prop undefined. Sự nhất quán giúp mã dễ đọc hơn và dễ dự đoán hơn.

Câu hỏi thường gặp

Có thể dùng prop?: Type nếu giá trị tạm thời là undefined không?

Có. Thực tế đây là cách làm phổ biến nếu component vẫn có thể hoạt động tốt mà không có prop, nhưng sẽ tận dụng nó nếu được cung cấp sau đó. Chỉ cần đảm bảo rằng bạn xử lý fallback trong component.

Cách nào là tốt nhất cho môi trường production?

Phụ thuộc vào ngữ cảnh cụ thể. Hãy ưu tiên sự rõ ràng giữa prop tùy chọn và bắt buộc, ghi chú rõ ràng hành vi của chúng, xử lý mọi trạng thái có thể xảy ra, và tuân theo quy ước chung của nhóm để đảm bảo sự nhất quán.

Các ứng dụng thực tế xử lý props thế nào?

Phần lớn các ứng dụng lớn sử dụng hệ thống kiểu của TypeScript để đảm bảo props của component được định nghĩa rõ ràng, thường ưu tiên những mẫu rõ ràng phù hợp với tình huống sử dụng. Việc thiết kế cẩn thận giúp cải thiện khả năng bảo trì và hiệu quả làm việc của lập trình viên.

Kết luận

Việc hiểu rõ khi nào nên dùng prop?: Type và khi nào nên dùng prop: Type | undefined là rất quan trọng trong quá trình phát triển React với TypeScript. Hãy chọn cách tiếp cận phù hợp nhất với logic component của bạn và đảm bảo rằng mọi props đều được ghi chú và xử lý rõ ràng xuyên suốt ứng dụng.

Bình luận

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

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

The Twelve-Factor App, cẩm nang gối đầu giường trong xây dựng application (Phần 1)

Giới thiệu. Ngày nay các phần mềm được triển khai dưới dạng các dịch vụ, chúng được gọi là các web apps hay software-as-a-service (SaaS).

0 0 39

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

8 Sai lầm phổ biến khi lập trình Android

1. Hard code.

0 0 199

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

Popular interview question: What is the difference between Process and Thread? 10 seconds a day

Video được đăng tại channel Tips Javascript

0 0 38

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

Thuật toán và ứng dụng - P1

Mục đích series. . Những bài toán gắn liền với thực tế. Từ đó thấy được tầm quan trọng của thuật toán trong lập trình.

0 0 42

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

Tác dụng của Docker trong quá trình học tập

Docker bây giờ gần như là kiến thức bắt buộc đối với các anh em Dev và Devops, nhưng mà đối với sinh viên IT nói chung vẫn còn khá mơ hồ và không biết tác dụng thực tế của nó. Hôm nay mình sẽ chia sẻ

0 0 47

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

Làm giàu trong ngành IT

Hầu như mọi người đều đi làm để kiếm tiền, ít người đi làm vì thấy cái nghề đó thú vị lắm. Bây giờ vất cho mình 100 tỷ bảo mình bỏ nghề thì mình cũng bỏ thôi.

0 0 49