Regras da SSR
Cada regra desta categoria reúne nesta página sua finalidade, configuração e exemplos incorreto e correto completos. Os exemplos de projeto também incluem os arquivos compartilhados, que devem ser usados nos dois casos. As linhas destacadas mostram a alteração; o código copiado preserva o conteúdo completo. As notas de suporte distinguem os diagnósticos disponíveis das convenções ilustrativas e dos contratos sem produtor atual; ativar um ID não implementa uma verificação ausente.
| Regra | Exemplos | Finalidade |
|---|---|---|
ssr/no-browser-globals-in-ssr |
Incorreto · Correto | Proibir variáveis globais exclusivas do navegador no contexto de SSR |
ssr/no-hydration-mismatch |
Incorreto · Correto | Proibir valores não determinísticos que causam divergências na hidratação |
Todas as regras · Opções das regras · Mapa de migração do ESLint · Verificações do projeto · Atributos entre componentes
ssr/no-browser-globals-in-ssr
Proibir variáveis globais exclusivas do navegador no contexto de SSR
Severidade padrão: warning
Predefinições: happy-path, nuxt, ecosystem, opinionated
Correção automática: Nenhuma; revise a alteração sugerida
Aplicável a: Templates e blocos de SFC Vue, com o contexto do script quando exigido pela regra
Opções: Sem opções específicas da regra. A severidade e a seleção de predefinições são configuráveis.
Configuração (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
Incorreto
Setup lê window.innerWidth imediatamente, embora window não exista quando o componente é executado no servidor.
<script setup lang="ts">
const width = window.innerWidth;
</script>
Correto
A largura inicial é um valor de ref seguro no servidor, e o acesso ao navegador é movido para onMounted, que é executado no cliente em vez de durante o setup de SSR.
<script setup lang="ts">
const width = ref(0);
onMounted(() => {
width.value = window.innerWidth;
});
</script>
O exemplo correto evita o diagnóstico desta regra com a configuração acima; outras regras ainda podem emitir diagnósticos.
Implementação · Todas as regras
ssr/no-hydration-mismatch
Proibir valores não determinísticos que causam divergências na hidratação
Severidade padrão: warning
Predefinições: happy-path, nuxt, ecosystem, opinionated
Correção automática: Nenhuma; revise a alteração sugerida
Aplicável a: Templates e blocos de SFC Vue, com o contexto do script quando exigido pela regra
Opções: Sem opções específicas da regra. A severidade e a seleção de predefinições são configuráveis.
Configuração (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
Incorreto
O template avalia Math.random() durante a renderização, então o servidor e o cliente podem produzir textos diferentes para o mesmo parágrafo.
<template>
<p>{{ Math.random() }}</p>
</template>
Correto
O parágrafo renderiza o estado estável seed em vez de um novo resultado aleatório. Neste exemplo no estilo do Nuxt, useState fornece o estado compartilhado e o inicializador é a constante "stable".
<script setup lang="ts">
const seed = useState("seed", () => "stable");
</script>
<template>
<p>{{ seed }}</p>
</template>
O exemplo correto evita o diagnóstico desta regra com a configuração acima; outras regras ainda podem emitir diagnósticos.