Thuta Learning
ရှာဖွေရန်
IntermediateMobile Developmentintermediate

View Lifecycle (onAppear, onDisappear)

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • View Lifecycle (onAppear, onDisappear) ကို ကြောက်စရာမလိုအောင် နားလည်မယ်
  • ကိုယ်တိုင် Xcode/SwiftUI code ကို run ကြည့်တတ်မယ်
  • Real project ထဲမှာ ဒီ concept ကို ချက်ချင်း အသုံးချတတ်မယ်

ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်

SwiftUI View struct ကို UIKit ရဲ့ Activity/ViewController lifecycle (`onCreate`, `onResume` စသည်) လိုမျိုး callback အများကြီး မရှိပါ — `onAppear { }` (View screen ပေါ်မှာ ပေါ်လာတိုင်း run) နဲ့ `onDisappear { }` (View screen ကနေ ကွယ်သွားတိုင်း run) ဆိုတဲ့ modifier ၂ ခုက အသုံးအများဆုံးပါ — data fetch (API call) ကို `onAppear` ထဲမှာ trigger လေ့ရှိပါတယ်.

လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်

`WeatherScreen` ကို `.onAppear { viewModel.fetchWeather() }` လို့ ရေးထားရင် — user က ဒီ screen ဆီ ရောက်လာတိုင်း weather data ကို automatic fetch လုပ်ပေးပါလိမ့်မယ် — screen ကနေ ထွက်သွားချိန် ongoing network task ကို cancel လုပ်ချင်ရင် `.onDisappear { viewModel.cancelFetch() }` ကို ထည့်နိုင်ပါတယ်.

အတူတူ ကြည့်မယ်

swift
struct WeatherScreen: View {
    @State private var weather: WeatherResponse?

    var body: some View {
        VStack {
            if let weather {
                Text("\(weather.tempCelsius)°C")
            } else {
                ProgressView()
            }
        }
        .onAppear {
            Task {
                weather = try? await fetchWeather(city: "Yangon")
            }
        }
    }
}
You should see
Screen ဆီ ရောက်လာတိုင်း loading spinner ပြီးရင် weather data ကို automatic fetch/display လုပ်တာ တွေ့ရမည်။

၅ မိနစ် စမ်းကြည့်

`WeatherScreen` ကို run ကြည့်ပြီး, `onAppear` ထဲက fetch logic ကို `print("appeared")` ရေးထား test ကြည့်ပါ — screen ဆီ ပြန်ရောက်တိုင်း console ထဲ 'appeared' ပြန်ပေါ်လာတာ confirm လုပ်ကြည့်ပါ။

သတိလေးတစ်ချက်

`onAppear` က View ကို 'ပထမဆုံးအကြိမ် create' တာနဲ့ မတူပါ — NavigationStack ထဲမှာ screen ကို ဝင်/ထွက်တိုင်း `onAppear` ထပ်ခါထပ်ခါ trigger ဖြစ်နိုင်ကြောင်း သတိထားပါ။

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • `onAppear` ကို NavigationStack ထဲက View မှာ သုံးပြီး, screen ကို repeatedly navigate ဝင်/ထွက်တိုင်း data ကို ထပ်ခါထပ်ခါ re-fetch ဖြစ်နေကြောင်း မသိခြင်း — caching strategy ထည့်စဉ်းစားသင့်ပါတယ်
  • Heavy/blocking operation ကို `onAppear` ထဲမှာ synchronous run ခြင်း — UI freeze ဖြစ်နိုင်ပါတယ် (Task { } ထဲမှာ async run သင့်ပါတယ်)

အခု ကိုယ်တိုင် စမ်းကြည့်

`WeatherScreen` ကို run ကြည့်ပြီး, `onAppear` ထဲက fetch logic ကို `print("appeared")` ရေးထား test ကြည့်ပါ — screen ဆီ ပြန်ရောက်တိုင်း console ထဲ 'appeared' ပြန်ပေါ်လာတာ confirm လုပ်ကြည့်ပါ။

You'll know it worked when: Screen ဆီ ရောက်လာတိုင်း loading spinner ပြီးရင် weather data ကို automatic fetch/display လုပ်တာ တွေ့ရမည်။

View Lifecycle (onAppear, onDisappear) | Thuta Learning