使用
服务端渲染(SSR)
的应用里,页面的 HTML 是由服务器生成的,随后被传送到客户端的浏览器。当浏览器接收到这些 HTML 内容后,会将其转变为一个可交互的页面。然而,倘若服务器端与客户端生成的 HTML 中具有相同的 ID,在客户端进行
激活(hydrate)
操作时,就有可能出现问题。因为客户端可能会试图对一个已经被服务器端渲染好的 DOM元 素进行操作,这样就会引发潜在的冲突或者错误
可以通过一个小例子来说明这个问题
服务端代码
客户端代码
在这个案例中,无论是服务端还是客户端,我们都使用了
createSSRApp(App)
来创建应用实例。如果我们在
App.vue
中使用了
useId
来生成 ID,那么这些 ID 将在服务端渲染时生成一次,并在客户端激活时再次使用相同的 ID
App.vue
在
App.vue
组件里,我们借助
useId
为
元素创建了一个独一无二的 ID。此 ID 在服务端渲染阶段生成,并被纳入发送至客户端的HTML之中。当客户端接收到该HTML并展开激活流程时,鉴于useId所生成的ID在服务端和客户端保持一致,客户端便能准确地把
元素与
元素相关联,从而避免出现 ID 冲突的情况