ngSkipHydration
is a special attribute which indicates to Angular that a particular component should be opted-out of hydration.
This diagnostic ensures that this attribute ngSkipHydration
is set statically and the value is either set to "true"
or an empty value.
import {Component} from '@angular/core';@Component({ template: `<user-viewer ngSkipHydration="hasUser" />`,})class MyComponent { hasUser = true;}
What's wrong with that?
As a special attribute implemented by Angular, ngSkipHydration
needs to be statically analyzable so Angular knows at compile-time whether or not hydration is needed for a component.
What should I do instead?
When using the ngSkipHydration
, ensure that it's set as a static attribute (i.e. you do not use the Angular template binding syntax).
import {Component} from '@angular/core';@Component({ template: ` <user-viewer ngSkipHydration /> <user-viewer ngSkipHydration="true" /> `,})class MyComponent {}
If a conditional is necessary, you can wrap the component in an *ngIf
.
import {Component} from '@angular/core';@Component({ template: ` <div *ngIf="hasUser; else noUser"> <user-viewer ngSkipHydration /> </div> <ng-template #noUser> <user-viewer /> </ng-template> `,})class MyComponent {}
Configuration requirements
strictTemplates
must be enabled for any extended diagnostic to emit.
skipHydrationNotStatic
has no additional requirements beyond strictTemplates
.
What if I can't avoid this?
This diagnostic can be disabled by editing the project's tsconfig.json
file:
{ "angularCompilerOptions": { "extendedDiagnostics": { "checks": { "skipHydrationNotStatic": "suppress" } } }}
See extended diagnostic configuration for more info.