我正在尝试在 Sapper 中实现 firebase。我安装了模块(@firebase/app、@firebase/auth、@firebase/firestore),然后编写了一个配置文件:
import firebase from '@firebase/app';
import '@firebase/firestore'
import '@firebase/auth'
const config = {
...
};
// Initialize Firebase
firebase.initializeApp(config);
export { firebase };
// Initialize db
export const db = firebase.firestore();
export const auth = firebase.auth();
Run Code Online (Sandbox Code Playgroud)
当我“npm run dev”时,我收到一条错误消息,指出这些 firebase 模块仅适用于客户端,不适用于 Node.js。
因此,我尝试通过多种方式解决这个问题,到目前为止唯一有效的方法是使用 onMount。
onMount(async () => {
const {auth} = await import('../firebase/config');
auth.signInWithEmailAndPassword("test@gmail.com", "test").then((res) => {
// do some stuff
})
})
Run Code Online (Sandbox Code Playgroud)
现在可以了,但我有 3 个问题:
1)这是正确的方法吗?2)我应该从服务器端删除这些模块还是最好保留它们?3)我应该同时使用Firebase的客户端和服务器端版本,并使用客户端版本1来检索每个访问者和服务器端与所有共同数据不同的所有数据吗?
我正在尝试在 Sveltejs 中创建一个 Form 组件。这个 Form 组件将<slot />用来让他的父级 (App.svelte) 定义哪些 Inputs 和 Buttons 应该在 Form 内。Inputs 和 Buttons 也是组件,一旦 Input 组件的值发生变化,我想更新父 Form 组件内的对象,当单击 Button 时,我想将数据发送回 App 组件。
我试图阅读 Svelte 文档并解决这个问题,<slot let:name={value}>但是当 Input 组件的值发生变化时,我找不到更新 Form 组件的方法。
这是我正在尝试做的结构:
App.svelte
...
<Form on:submit={saveReceivedData}>
<Input name="..." value="..." />
<Button />
</Form>
...
Run Code Online (Sandbox Code Playgroud)
Form.svelte
<script>
...
let data = {}
</script>
...
<form>
<slot />
</form>
...
Run Code Online (Sandbox Code Playgroud)
输入.svelte
...
<input name={name} value={value} on:input={updateDataVariableOnFormComponent} />
...
Run Code Online (Sandbox Code Playgroud)
Button.svelte
...
<button on:click={sendDataVariableToAppComponent}>Send</button>
...
Run Code Online (Sandbox Code Playgroud)
如果需要,我可以尝试向您发送完整代码。但是,既然我的问题不是“我做错了什么?” …
我有一个与 Sapper 的路由和 Svelte 的转换相关的问题。
我创建了一个只有 2 个页面的小型 Sapper 网站。在主页上我有一个轮播组件。每张幻灯片都有一个in:fade={{duration: 2000}}和一个out:fade={{duration: 2000, delay: 1000}}。
当页面首次加载时,没有过渡,这是完美的。
当我导航到 /contacts 时,问题就出现了,在我开始看到“联系人”页面之前,我必须等待 3 秒的淡出。转换完成后我就可以看到该页面。
这种行为正常吗?我能以某种方式避免它吗?我最终只使用了 CSS 过渡,但我更喜欢使用 svelte-transition :)