Trang chủ

Trạng thái và luồng dữ liệu

Ai sở hữu giá trị, và ai được phép đổi nó

Mọi property wrapper trong SwiftUI đề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ó? Chọn nhầm hiếm khi sinh ra lỗi biên dịch. Nó sinh ra một view không cập nhật, hoặc một view cập nhật nhiều quá mức, hoặc trạng thái bị đặt lại trong khi chẳng ai yêu cầu.

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

Ba chương ở đây tháo cái bảng đó ra.

Ai sở hữu giá trị là quy trình quyết định — @State so với @Binding so với một đối tượng mô hình — và triệu chứng cụ thể mà mỗi câu trả lời sai sinh ra, để bạn đọc ngược từ một lỗi về đến chỗ sai.

Observation nói @Observable thật ra làm gì: SwiftUI biết một view đã đọc những thuộc tính nào bằng cách nào, và vì sao điều đó khiến ObservableObject cùng @Published trở nên lỗi thời chứ không chỉ là dài dòng hơn.

Environment là tiêm phụ thuộc đi xuống theo cây view — thứ gì thuộc về nó, thứ gì rất không thuộc về nó, và cách tự thêm một khóa của riêng bạn.

Một quy tắc đáng mang theo vào cả ba chương: trạng thái thuộc về view thấp nhất cần đến nó, và không thấp hơn. Cao quá thì những view chẳng liên quan cũng vẽ lại vì những thay đổi không dính dáng đến chúng. Thấp quá thì không chia sẻ được, nên bạn phải luồn binding qua năm lớp view chẳng quan tâm.