😁React Context với TypeScript: Phần 1 - Ngữ cảnh đơn giản với các thành phần hàm
https://www.carlrippon.com/react-context-with-typescript-p1/
Last updated
Was this helpful?
https://www.carlrippon.com/react-context-with-typescript-p1/
Last updated
Was this helpful?
src\App.tsx
React context cho phép nhiều thành phần trong một cây chia sẻ một số dữ liệu. Thuận tiện hơn so với việc truyền dữ liệu qua props xuống cây thành phần. Làm thế nào chúng ta có thể sử dụng TypeScript để tạo một ngữ cảnh được gõ mạnh? Có thể thực hiện điều này để sử dụng với các thành phần hàm cũng như các thành phần lớp không? Đây là bài đăng đầu tiên trong bốn bài đăng trên blog đề cập đến chủ đề này.
Phần 1 - Ngữ cảnh đơn giản với các thành phần chức năng (bài đăng này)
Phần 3 - Bối cảnh với các thành phần lớp
Trong bài viết này, chúng ta sẽ tạo một ngữ cảnh React có kiểu dữ liệu mạnh và sử dụng nó trong một thành phần hàm mà không làm thay đổi ngữ cảnh.
Một trường hợp sử dụng phổ biến khi sử dụng ngữ cảnh là cung cấp thông tin chủ đề cho các thành phần trong ứng dụng. Chúng ta sẽ cung cấp giá trị màu trong ngữ cảnh mà các thành phần có thể sử dụng.
Hãy bắt đầu bằng cách tạo chủ đề của chúng ta bằng createContext
hàm Reacts:
Chúng tôi được yêu cầu cung cấp giá trị mặc định cho ngữ cảnh, trong trường hợp của chúng tôi là "white"
.
Loại ngữ cảnh được suy ra là React.Context<string>
:
Tuyệt vời - đúng như chúng tôi yêu cầu!
Tiếp theo, chúng ta sẽ tạo thành phần nhà cung cấp:
Chúng tôi giữ giá trị chủ đề trong trạng thái. Điều này có nghĩa là khi nó thay đổi, React sẽ tự động render lại các con của nhà cung cấp với chủ đề mới.
Chúng ta lấy giá trị chủ đề hiện tại bằng cách sử dụng React useEffect
hook và cập nhật theme
giá trị trạng thái.
Thành phần cung cấp chủ đề của chúng tôi trả về Provider
thành phần trong ngữ cảnh với giá trị chủ đề của chúng tôi. Nhà cung cấp được bao bọc xung quanh tất cả các thành phần con trong cây thành phần.
Chúng ta có thể tạo một hook tùy chỉnh cho phép các thành phần hàm sử dụng ngữ cảnh của chúng ta:
Hãy kiểm tra xem kiểu trả về useTheme
đã được suy ra là gì:
Kiểu trả về useTheme
là string
vì đây là kiểu của giá trị ngữ cảnh.
Bây giờ thành ThemeProvider
phần có thể được đặt ở vị trí thích hợp trong cây thành phần.
Các thành phần bên dưới nó sẽ có quyền truy cập vào ngữ cảnh, nhưng các thành phần bên trên nó thì không. Vì vậy, Header
thành phần sẽ có quyền truy cập vào ngữ cảnh.
Thành Header
phần có thể truy cập ngữ cảnh bằng cách sử dụng useTheme
hook chúng ta đã tạo. Điều này cho phép thành phần tiêu đề hiển thị một phần tử có màu nền được đặt thành màu chủ đề:
Phiên bản đang hoạt động ThemeContext
có sẵn bằng cách nhấp vào liên kết bên dưới. Khi ứng dụng được chạy, Hello sẽ xuất hiện với nền màu xanh nhạt.
Kiểu cho ngữ cảnh được suy ra chính xác nếu một giá trị mặc định hợp lý được cung cấp khi nó được tạo. Nếu ngữ cảnh cung cấp các giá trị mà người dùng không thay đổi, thì điều này là ổn. Tuy nhiên, nếu chúng ta muốn người dùng thay đổi chủ đề thì sao? Trong trường hợp này, ngữ cảnh của chúng ta sẽ cần cung cấp một hàm để cập nhật chủ đề và không thể cung cấp hàm này làm giá trị mặc định. Trong bài đăng tiếp theo , chúng ta sẽ mở rộng ngữ cảnh chủ đề của mình để người dùng có thể cập nhật giá trị.