Css toàn cầu phản ứng
Bối cảnh cung cấp phương pháp truyền dữ liệu xuyên suốt cây thành phần mà không cần phải truyền đạo cụ một cách thủ công qua từng cấp độ Show
Thông thường với một ứng dụng React, dữ liệu được truyền từ trên xuống (cha tới con) thông qua props, điều này có vẻ khá trống rỗng đối với một số loại props (Ví dụ như tùy chọn ngôn ngữ, chủ đề giao diện người dùng) chúng thường được sử dụng . Bối cảnh cung cấp một cách làm cho phép chúng ta chia sẻ các giá trị giống như vậy giữa các thành phần mà không cần truyền giá trị tới tất cả các cấp trong cây thành phần
When any should use ContextBối cảnh được thiết kế để chia sẽ dữ liệu khi chúng được xem là “dữ liệu toàn cầu” của toàn bộ ứng dụng React, giả sử như thông tin về người dùng hiện đang đăng nhập, chủ đề hoặc ngôn ngữ mà người dùng đã chọn. Ví dụ, ở đoạn mã bên dưới, chúng ta truyền một prop “theme” để tạo kiểu cho một thành phần Button
Sử dụng bối cảnh, chúng ta có thể tránh được đạo cụ truyền thông qua các yếu tố trung gian
Trước khi bạn sử dụng bối cảnhPhần chủ ngữ cảnh được sử dụng khi một số dữ liệu cần được truy cập bởi nhiều thành phần ở nhiều tầng khác nhau. Sử dụng nó một cách cẩn thận bởi vì điều đó sẽ làm thành phần trở nên khó tái sử dụng hơn Nếu bạn chỉ muốn sử dụng bối cảnh để tránh việc truyền một số đạo cụ qua nhiều cấp độ, thì thành phần thành phần thường là một giải pháp đơn giản hơn so với bối cảnh Ví dụ, một thành phần 0 truyền 1 và 2 chống lại một số cấp độ hạ cấp để các thành phần 3 và 4 có thể đọc được
Bạn có thể cảm thấy dư thừa khi truyền 1 và 6 đạo cụ thông qua nhiều cấp độ nếu chỉ có thành phần 4 thực sự cần thiết để đến với nó. Nó cũng khá khó chịu Mỗi khi thành phần 4 cần thêm đạo cụ từ các tầng trên cùng, bạn phải thêm tất cả các đạo cụ đó ở tất cả các tầng trung gianMột cách để giải quyết vấn đề này mà không sử dụng bối cảnh là thành phần truyền thông tự nhiên của 4 bằng cách này, các thành phần trung gian không cần thiết phải giữ 1 hoặc đạo cụ 2 5Với sự thay đổi này, chỉ có tầng trên cùng của thành phần Trang được biết là thành phần 3 và 4 sử dụng 1 và 6Sự đảo ngược quyền kiểm soát (đảo ngược quyền kiểm soát) này có thể giúp mã của bạn rõ ràng hơn ở nhiều trường hợp bằng cách giảm số lượng đạo cụ cần phải truyền xuyên suốt ứng dụng của bạn và cho phép kiểm soát đến thành phần gốc. Tuy nhiên, đây không phải là một lựa chọn tốt cho mọi trường hợp, chuyển đổi mức độ phức tạp lên mức cao hơn trong cây thành phần khiến những thành phần ở cấp cao (thành phần cấp cao hơn) trở nên phức tạp và bắt buộc đối với những thành phần đó Bạn không bị giới hạn vào một con duy nhất cho mỗi thành phần. Bạn có thể truyền nhiều con, hay thậm chí chí là nhiều “khe” tách biệt cho con, Như tài liệu ở đây 0Mẫu này hoàn toàn có hiệu quả cho nhiều trường hợp khi bạn cần tách một thành phần con khỏi các thành phần trung gian của nó. Bạn có thể tiến xa hơn nữa với các đạo cụ kết xuất nếu thành phần con cần giao tiếp với thành phần cha mẹ trước khi kết xuất Tuy nhiên, đôi khi có những dữ liệu trùng lặp cần được truy cập bởi nhiều thành phần trong cây thành phần và ở nhiều tầng khác nhau. Context cho phép bạn “Phát sóng (broadcast)” những dữ liệu như vậy, và trao đổi nó đến tất cả những thành phần bên dưới. Ví dụ như khi sử dụng ngữ cảnh có thể sẽ đơn giản hơn so với những lựa chọn thay thế bao gồm quản lý ngôn ngữ hiện tại, chủ đề, hay bộ nhớ đệm dữ liệu API// Context lets us pass a value deep into the component tree// without explicitly threading it through every component.// Create a context for the current theme (with "light" as the default).const ThemeContext = React.createContext('light');
class App extends React.Component {
render() {
// Use a Provider to pass the current theme to the tree below. // Any component can read it, no matter how deep it is. // In this example, we're passing "dark" as the current value. return (
2Create a Context object. Khi React render một component mà nó subcribe to Context object này, nó sẽ đọc giá trị hiện tại của context đó từ 57 gần nhất trên cây componentĐối số 58 chỉ được sử dụng khi một thành phần không có Nhà cung cấp nào bên trên nó trong cây thành phần. Điều này có thể hữu ích cho việc kiểm tra thành phần một cách cô lập mà không cần phải bọc chúng lại. Lưu ý. truyền 59 với tư cách là một nhà cung cấp giá trị sẽ không khiến các thành phần tiêu thụ sử dụng 58
|