"command 안에선 Tauri가 필요한 걸 쥐여줘. command 밖에선 — setup이든 스레드든 타이머든 — AppHandle을 들고 앱 쪽으로 손을 뻗는 거야."
들고 다니는 손잡이
command는 State랑 Window를 받아 쓰지만, 코드 상당수는 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;야.
주입 없이 state에 닿기
command 안에선 State<T>를 파라미터로 받아. 밖에선 손잡이에서 꺼내 — app.state::<T>()가 똑같이 맡아둔 그 인스턴스를 돌려줘. 백그라운드 루프가 command랑 같은 설정을 읽거나, setup 훅이 캐시를 미리 채워두는 게 다 이 방식이야. 맡아둔 값은 하나인데, 코드가 어디서 도느냐에 따라 닿는 길이 둘인 거지.