Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nuxt 3 笔记:服务端 vs 客户端 #20

Open
cssmagic opened this issue Mar 17, 2024 · 0 comments
Open

Nuxt 3 笔记:服务端 vs 客户端 #20

cssmagic opened this issue Mar 17, 2024 · 0 comments
Labels

Comments

@cssmagic
Copy link
Owner

组件

<ClientOnly>

<template>
	<ClientOnly fallback-tag="span" fallback="Loading comments...">
		<Comment />
	</ClientOnly>
</template>

这个组件在服务端渲染时得到:

<span>Loading comments...</span>

也可以通过 #fallback 插槽来声明服务端占位内容。

变量

以下变量在 Nuxt 3 文档中似乎没有提及。

process.server & process.client

console.log('process.server ===', process.server)
console.log('process.client ===', process.client)

以上代码在着陆状态下,在服务端输出一次:

true === true
false === false

process. 改成 process\. 则可以让服务端输出正确的信息。或许这两个变量的原理是 Nuxt 通过对源码做了字面替换来实现的。

在浏览器端输出一次:

process.server === false
process.client === true

在 SPA 状态下,在浏览器端输出一次(输出结果同上)。

Vue 生命周期钩子

由于 SSR 阶段不会执行 onMounted 等生命周期钩子,我们可以把客户端代码写入其中。

API 行为差异

useRequestEvent()

在页面、组件、插件中,用来获取当前请求:

const event = useRequestEvent()

const url = event.node.req.url

在客户端只能得到 undefined。

useRequestHeaders()

// 获取所有请求头:
const headers = useRequestHeaders()
// 获取指定请求头:
const headers = useRequestHeaders(['cookie'])

在客户端只能得到空对象。


相关链接:

@cssmagic cssmagic added the Nuxt3 label Mar 17, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant