Expo router v2 "Attempted to navigate before mounting the Root Layout component. Ensure the Root Layout component is rendering a Slot" hatası çözümü
Expo 49, Expo router v2 kullandıgımızda _layout.js içerisinde oturum kontrolü yapıp, session yoksa login ekranını açmak gibi bir standart kodum var.
Expo'nun kendi dökümanında* örnek auth flow kodu mevcut. Ancak çalışmıyor *https://docs.expo.dev/router/reference/authentication/
ERROR Error: Attempted to navigate before mounting the Root Layout component. Ensure the Root Layout component is rendering a Slot, or other navigator on the first render.
hatası fırlatıyor. Aslında kendini açıklayan bir hata. Daha navigator hazır değil iken redirect etmeye çalışıyorsun diyor.
Çözüm basit: Redirect etmek için navigator beklemek.
const navigationState = useRootNavigationState();
React.useEffect(() => {
if (!navigationState?.key) return;
//...
redirect('/what do you want');
}, [user, segments,navigationState]);
}
Örnek dökümanı da güncelleyip, PR gönderdim. Isterseniz oradan da bakabilirsiniz.
https://github.com/expo/expo/pull/23722/files
SetTimeout ile de bir çözüm önerilmiş ancak bu bana biraz hacky geldi.
if (Platform.OS === "ios") {
setTimeout(() => {
router.replace("/");
}, 1)
} else {
setImmediate(() => {
router.replace("/");
});
}
ilgili issue