passToClient

默认情况下 pageContext 仅在服务端可用,但我们可以使用 passToClient 使某些 pageContext 在浏览器中可用

// *.page.server.js
// Environment: Node.js

export { passToClient }

// 传递给浏览器的 `pageContext` 示例
const passToClient = [
	'pageProps',
	'routeParams',
	// (深选择还未实现,如果需要,请开一个 Github ticket)
	'user.id',
	'user.name',
]
// *.page.client.js
// Environment: Browser

export { render }

async function render(pageContext) {
	// `passToClient` 使得这些 `pageContext` 在浏览器中可用
	pageContext.pageProps
	pageContext.routeParams
	pageContext.user.id
	pageContext.user.name

	/* ... */
}

passToClient 通常与 onBeforeRender() hook 一起使用:数据在async onBeforeRender() 中获取,然后通过 passToClient 提供给浏览器,请参阅数据获取

序列化是使用 @brillout/json-serializer 实现

用户定义的类

用户定义的类在序列化过程中会丢失:

class MyClass {
	prop = 42
}

// 在服务端:
const obj = new MyClass()
console.log(obj) // MyClass { prop: 42 }
console.log(obj instanceof MyClass) // true

// `obj` 在浏览器端被序列化之后
console.log(obj) // { prop: 42 }
console.log(obj instanceof MyClass) // false

请参考 GitHub > brillout/json-serializer > #3 Support user-defined classes.