SSR ルール
このページに、各ルールの目的・前提・設定と、省略のない悪い例・良い例をまとめています。変更箇所は行の色で示します。コードをコピーすると、ソースコード全体を取得できます。各例に現在の対応範囲も明記しています。
| ルール | 例 | 目的 |
|---|---|---|
ssr/no-browser-globals-in-ssr |
悪い · 良い | SSR で実行されるコードのブラウザー専用グローバル参照を検出します。 |
ssr/no-hydration-mismatch |
悪い · 良い | サーバーとクライアントで一致しないテンプレート値を検出します。 |
全ルール · ルールのオプション · ESLint 移行対応表 · プロジェクトの検査 · 子への属性の継承
ssr/no-browser-globals-in-ssr
SSR で実行されるコードのブラウザー専用グローバル参照を検出します。
既定の重大度: warning
プリセット: happy-path, nuxt, ecosystem, opinionated
自動修正: なし。修正内容を確認してください
適用範囲: Vue SFC のテンプレートと各ブロック。ルールに必要な script の文脈も例に含めています。
オプション: ルール固有のオプションはありません。重大度とプリセットは設定できます。
設定(Vite+)
import { defineConfig } from "@vizejs/vite-plugin/vite-plus";
export default defineConfig({
vue: {
linter: {
"preset": "incremental",
"rules": {
"ssr/no-browser-globals-in-ssr": "warn"
}
},
},
});
vp run lint
悪い
setup の実行時に window.innerWidth を直接読みますが、サーバー上のコンポーネント実行時には window が存在しません。
<script setup lang="ts">
const width = window.innerWidth;
</script>
良い
幅を ref(0) で初期化し、ブラウザー API の参照をクライアントで実行される onMounted に移します。これにより、SSR の setup ではブラウザー API を参照しません。
<script setup lang="ts">
const width = ref(0);
onMounted(() => {
width.value = window.innerWidth;
});
</script>
良い例は上記の設定でこのルールの診断が出ない例です。他のルールの診断は出る場合があります。
ssr/no-hydration-mismatch
サーバーとクライアントで一致しないテンプレート値を検出します。
既定の重大度: warning
プリセット: happy-path, nuxt, ecosystem, opinionated
自動修正: なし。修正内容を確認してください
適用範囲: Vue SFC のテンプレートと各ブロック。ルールに必要な script の文脈も例に含めています。
オプション: ルール固有のオプションはありません。重大度とプリセットは設定できます。
設定(Vite+)
import { defineConfig } from "@vizejs/vite-plugin/vite-plus";
export default defineConfig({
vue: {
linter: {
"preset": "incremental",
"rules": {
"ssr/no-hydration-mismatch": "warn"
}
},
},
});
vp run lint
悪い
テンプレートが描画時に Math.random() を評価し、同じ段落でもサーバーとクライアントで異なるテキストになり得ます。
<template>
<p>{{ Math.random() }}</p>
</template>
良い
新たな乱数ではなく、安定した seed の状態を段落に描画します。この Nuxt 形式の例では useState が状態を共有し、初期値も定数 "stable" です。
<script setup lang="ts">
const seed = useState("seed", () => "stable");
</script>
<template>
<p>{{ seed }}</p>
</template>
良い例は上記の設定でこのルールの診断が出ない例です。他のルールの診断は出る場合があります。