Angular 2
Optymalizacja renderowania za pomocą ChangeDetectionStrategy
Szukaj…
Domyślnie vs OnPush
Rozważ następujący składnik z jednym wejściem myInput
i wartością wewnętrzną o nazwie someInternalValue
. Oba są używane w szablonie komponentu.
import {Component, Input} from '@angular/core';
@Component({
template:`
<div>
<p>{{myInput}}</p>
<p>{{someInternalValue}}</p>
</div>
`
})
class MyComponent {
@Input() myInput: any;
someInternalValue: any;
// ...
}
Domyślnie właściwość changeDetection:
w dekoratorze komponentów zostanie ustawiona na ChangeDetectionStrategy.Default
; domyślnie w tym przykładzie. W tej sytuacji wszelkie zmiany dowolnych wartości w szablonie spowodują ponowne renderowanie MyComponent
. Innymi słowy, jeśli zmienię myInput
lub someInternalValue
kąt 2 someInternalValue
energię i ponownie wyrenderuje komponent.
Załóżmy jednak, że chcemy ponownie renderować tylko przy zmianie danych wejściowych. Rozważ następujący składnik z changeDetection:
ustaw na ChangeDetectionStrategy.OnPush
import {Component, ChangeDetectionStrategy, Input} from '@angular/core';
@Component({
changeDetection: ChangeDetectionStrategy.OnPush
template:`
<div>
<p>{{myInput}}</p>
<p>{{someInternalValue}}</p>
</div>
`
})
class MyComponent {
@Input() myInput: any;
someInternalValue: any;
// ...
}
Ustawiając changeDetection:
na ChangeDetectionStrategy.OnPush
, MyComponent
będzie renderował się ponownie tylko po zmianie danych wejściowych. W takim przypadku myInput
będzie musiał otrzymać nową wartość od swojego rodzica, aby uruchomić ponowne renderowanie.