Moins utiliser OnInit et OnChanges
Je n’utilise presque jamais ngOnInit ou ngOnChanges dans mes composants Angular.
D’ailleurs, savez-vous à quoi ils servent exactement ?
- Lorsque OnInit s’exécute, les inputs sont définis
- OnChanges s’exécute à chaque fois qu’un input change
Je vois souvent des devs qui utilisent ces hooks pour définir des propriétés.
Ce n’est pas nécessaire. ❌
- 👉 Si vous n’avez pas besoin de la donnée d’un input, définissez votre propriété dès son initialisation
- 👉 Si vous avez besoin de la donnée d’un input, utilisez le setter de l’input (ou la nouvelle propriété transform)
Votre code sera moins verbeux et plus déclaratif !
// ❌ Utilisation superflux de OnInit et OnChanges
@Component({
selector: "app-user-details",
standalone: true,
template: `
<p>{{ user().name }}</p>
<p>{{ someData }}</p>
`,
})
export class UserDetailsComponent implements OnInit, OnChanges {
#service = inject(UserService);
someData!: SomeData;
user = signal<User>({} as User);
@Input()
userId!: number;
ngOnInit() {
this.someData = this.#service.someData;
}
ngOnChanges() {
this.user.set(this.#service.getUserDetails(this.userId));
}
}
// ✅ On se sert uniquement du setter de l'input
@Component({
selector: "app-user-details",
standalone: true,
template: `
<p>{{ user().name }}</p>
<p>{{ someData }}</p>
`,
})
export class UserDetailsComponent {
#service = inject(UserService);
someData = this.#service.someData;
user = signal<User>({} as User);
@Input()
set userId(userId: number) {
this.user.set(this.#service.getUserDetails(userId));
}
}