- Published on
SwiftUI-da onAppear va onDisappear β qanday ishlatish kerak
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Bu videoda biz onAppear va onDisappear modifikatorlarini ko'rib chiqamiz. Ular aynan nomidan bilinganidek β view ekranda paydo bo'lganda yoki ekrandan yo'qolganda kod ishga tushiradi.
Masalan, rasm faqat ekranda ko'rinadigan bo'lgandagina yuklansin desangiz β onAppear buning uchun ideal. Foydalanuvchi ekrandan ketganda ma'lumotlar bazasiga so'rovlarni to'xtatish kerak bo'lsa β onDisappear yordamida.
Asosiy misol β onAppear
struct OnAppearBootcamp: View {
@State var myText: String = "Boshlang'ich matn"
var body: some View {
NavigationView {
ScrollView {
Text(myText)
}
.onAppear {
myText = "Bu yangi matn"
}
.navigationTitle("onAppear")
}
}
}
ScrollView ekranda paydo bo'lishi bilanoq onAppear ichidagi kod ishlaydi va myText yangilanadi. Ko'z ochib yumguncha sodir bo'ladi β foydalanuvchi boshlang'ich matnni ko'rmaydi.
DispatchQueue β kechiktirilgan kod
Kodni darhol emas, ma'lum vaqtdan keyin ishlatish uchun DispatchQueue ishlatiladi:
struct OnAppearBootcamp: View {
@State var myText: String = "Boshlang'ich matn"
var body: some View {
NavigationView {
ScrollView {
Text(myText)
}
.onAppear {
// ScrollView paydo bo'lganda darhol chaqiriladi
// Lekin DispatchQueue 5 soniya kechiktiradi
DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
myText = "Bu yangi matn"
}
}
.navigationTitle("onAppear")
}
}
}
Bu qanday ishlaydi:
ScrollViewekranda paydo bo'ladionAppeardarhol chaqiriladiDispatchQueue5 soniya kutadi- 5 soniyadan keyin
myTextyangilanadi va ekran yangilanadi
Kechiktirishni kamroq ishlatgan ma'qul, lekin kerak bo'lganda .now() + N β N o'rniga soniyalar sonini yozasiz.
onDisappear β view ekrandan ketganda
ScrollView {
Text(myText)
}
.onAppear {
myText = "Bu yangi matn"
}
.onDisappear {
myText = "Tugash matni"
// Ma'lumotlar bazasiga so'rovlarni to'xtatish
// Taymerlarni bekor qilish
// Resurslarni tozalash
}
onDisappear view ekrandan ketganda β masalan foydalanuvchi boshqa ekranga o'tganda yoki modal yopilganda β chaqiriladi. Ko'pincha ishlab turgan jarayonlarni to'xtatish uchun ishlatiladi.
Modifier qayerda turishi muhim
onAppear qaysi view-ga qo'yilganiga qarab, u har xil vaqtda chaqiriladi:
NavigationView {
ScrollView {
LazyVStack {
ForEach(0..<50) { _ in
RoundedRectangle(cornerRadius: 25)
.frame(height: 200)
.padding()
.onAppear {
// Har bir to'rtburchak ekranda paydo bo'lganda chaqiriladi
// 50 ta bo'lsa β 50 marta chaqiriladi
// Faqat ko'rinadigan bo'lganda, hammasi bir vaqtda emas
}
}
}
}
.onAppear {
// ScrollView birinchi marta paydo bo'lganda β faqat 1 marta chaqiriladi
}
}
.onAppear {
// NavigationView paydo bo'lganda β faqat 1 marta chaqiriladi
}
LazyVStack bilan amaliy misol
LazyVStack faqat ekranda ko'rinadigan elementlarni yaratadi. onAppear bilan birgalikda har bir element ekranga chiqqanida alohida kuzatish mumkin:
struct OnAppearBootcamp: View {
@State var count: Int = 0
var body: some View {
NavigationView {
ScrollView {
LazyVStack {
ForEach(0..<50) { _ in
RoundedRectangle(cornerRadius: 25)
.frame(height: 200)
.padding()
.onAppear {
count += 1
// Har bir yangi to'rtburchak ekranda
// paydo bo'lganda count bittaga ortadi
}
}
}
}
.navigationTitle("onAppear: \(count)")
}
}
}
Natija:
- Ilova ochilganda faqat 3 ta to'rtburchak ko'rinadi β count = 3
- Scroll qilganda yangi to'rtburchaklar paydo bo'ladi β count oshib boradi
- Hammasi bir vaqtda yuklanmaydi β faqat ekranda ko'rinadiganlar yuklanadi
Bu rasmlar yoki ma'lumotlarni faqat kerak bo'lgandagina yuklash uchun ideal usul.
Xulosa
| Modifier | Qachon chaqiriladi | Asosiy ishlatilishi |
|---|---|---|
.onAppear | View ekranda paydo bo'lganda | Ma'lumot yuklash, taymer boshlash |
.onDisappear | View ekrandan ketganda | Jarayonlarni to'xtatish, tozalash |
Modifier qaysi view-ga qo'yilganiga e'tibor bering β ScrollView-ga qo'yilsa bir marta, ForEach ichidagi har bir elementga qo'yilsa har bir element uchun alohida chaqiriladi.
Rahmat, men Nick, bu Swiftful Thinking va keyingi videoda ko'rishguncha!