Chọn đúng property wrapper
Mọi property wrapper đều trả lời đúng một câu hỏi: ai sở hữu giá trị này, và ai được phép đổi nó?
| Wrapper | Chủ sở hữu | Dùng cho |
|---|---|---|
@State |
chính view này | trạng thái kiểu giá trị mà riêng view này giữ |
@Binding |
người khác | một tay cầm hai chiều được truyền xuống |
@Observable / @Bindable |
một kiểu tham chiếu | đối tượng mô hình dùng chung nhiều view |
@Environment |
môi trường | giá trị được truyền xuống ngầm |
@Observable
final class Cart {
var items: [Item] = []
var total: Decimal { items.reduce(0) { $0 + $1.price } }
}
struct CartView: View {
@Environment(Cart.self) private var cart
var body: some View {
List(cart.items) { ItemRow(item: $0) }
}
}
@Observable đã thay cho ObservableObject và @Published: thay vì cả đối tượng thông báo có thay
đổi, SwiftUI theo dõi xem view thật sự đọc những thuộc tính nào rồi chỉ vẽ lại đúng những view đã
đọc thuộc tính vừa đổi. Một view liệt kê items sẽ không vẽ lại khi thứ khác thay đổi.
Đây là chương mẫu. Phần nội dung đầy đủ vẫn đang được viết.