在__layout.svelte的onMount完成后运行页面的onMount



在svelte kit中是否有办法在完成__layout.svelteonMount功能后再执行页面的onMount功能?在__layout.svelteonMount中,我初始化了firebase,在onMount中,我使用了firebase认证。所以如果没有完成__layput.svelteonMount,我就不能运行它。

firebase函数也不能在load函数中工作,因为它们需要访问window对象。

除了这个,还有更好的方法来使用firebase吗?

__layout。苗条的,


onMount(() => {
let fApp: FirebaseApp;
if (getApps().length === 0) {
fApp = initializeApp(firebaseConfig);
} else {
fApp = getApp();
}
const fAuth = getAuth(fApp);
$app = fApp;
$auth = fAuth;
onAuthStateChanged(fAuth, (user) => {
if (user) {
$signedIn = true;
} else {
$signedIn = false;
} //app, auth and signedIn are stores
});
});

在另一个文件中,我想使用firebase认证,但getAuth返回一个错误,当页面直接导航到时,没有firebase应用程序初始化。应用程序在布局文件的onMount中初始化,但页面的onMount在它完成之前被调用。

有一种方法,但我根本不建议使用,因为这会有效地消除任何服务器端呈现的可能性。

简单地把slot从你的布局包装在一个if块检查hasMounted标志

<script>
import { onMount } from "svelte";
let hasMounted = false;
onMount(() => {
console.log("layout has mounted");
hasMounted = true;
});
</script>
{#if hasMounted}
<slot />
{/if}

但是因为这个标志只被设置为trueonMount中,这意味着它永远不会是true服务器端,所以如果你这样做,就不会有更多的服务器端渲染。

相关内容

  • 没有找到相关文章

最新更新