C.W.K.
Stream
Lesson 02 of 06 · published

AppHandle & Manager 트레이트

~13 min · tauri, apphandle, manager, rust

Level 0웹 관광객
0 XP0/56 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete
"command 안에선 Tauri가 필요한 걸 쥐여줘. command 밖에선 — setup, 스레드, 타이머 — AppHandle을 들고 앱에 다시 손을 뻗어."

들고 다니는 핸들

command는 StateWindow를 주입받지만, 많은 코드가 command 에서 돌아: setup 훅, 백그라운드 스레드, async 태스크, OS 이벤트 콜백. 거기선 AppHandle을 들어 — 돌아가는 애플리케이션으로 가는 싸고 복제 가능한 참조야. 복제해서 스레드로 옮기면, 어디서든 이벤트를 emit하고, managed state를 읽고, 창을 찾을 수 있어.

Manager 트레이트가 도구상자야

쓸모 있는 메서드 대부분 — .state::<T>(), .emit(), .get_webview_window(), 앱 디렉터리용 .path() — 은 Manager 트레이트에서 와. App, AppHandle, Window, WebviewWindow가 다 그걸 구현해서, setup의 &App에 있든 스레드 깊은 곳의 AppHandle에 있든 같은 도구상자를 쓸 수 있어. use tauri::Manager;가 그 메서드들을 켜는 import야.

주입 없이 state에 닿기

command 안에선 State<T>를 파라미터로 받아. 밖에선 핸들에서 가져와: app.state::<T>()가 같은 managed 인스턴스를 돌려줘. 백그라운드 루프가 command가 읽는 같은 설정을 읽거나, setup 훅이 캐시를 미리 채우는 방식이 이거야. managed 값 하나, 코드가 도는 곳에 따라 닿는 방법 둘.

Code

AppHandle을 백그라운드 스레드로 들고 가기·rust
use tauri::Manager;
use std::time::Duration;

pub fn run() {
    tauri::Builder::default()
        .manage(AppConfig { /* ... */ })
        .setup(|app| {
            // 백그라운드 스레드가 앱을 쓰게 핸들 복제.
            let handle = app.handle().clone();
            std::thread::spawn(move || {
                loop {
                    std::thread::sleep(Duration::from_secs(5));
                    // command 밖에서 managed state에 닿기:
                    let cfg = handle.state::<AppConfig>();
                    // 프론트엔드에 소식 밀기 (이벤트: 다음 레슨들):
                    let _ = handle.emit("tick", cfg.theme.clone());
                }
            });
            Ok(())
        })
        .run(tauri::generate_context!())
        .expect("error while running app");
}

External links

Exercise

setup() 훅에서 AppHandle을 복제하고, 루프에서 3초 자고 handle로 뭔가 출력하는(예: managed state 읽어서 출력) std::thread를 spawn해. UI가 반응성을 유지하는 동안 백그라운드에서 도는지 확인해. 이벤트랑 타이머가 의존하는 '핸들을 command 세계 밖으로 들고 가기' 패턴을 연습하는 거야.
Hint
let handle = app.handle().clone(); 그다음 std::thread::spawn(move || { loop { sleep; let s = handle.state::(); ... } }). move 키워드가 복제된 핸들을 스레드로 옮겨.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.