2017-01-17 8 views
1

Если у меня есть список привязок todos к наблюдаемому, а затем изменить один из todos, будут ли все предметы переизданы?Переставляются ли элементы при изменении, а элемент в ngrx/store

+0

Без кода это будет трудно, чтобы помочь вам ... – Maxime

+0

Еще лучше, если вы можете оставить Plunkr с демо, и я определенно буду в состоянии сказать вам :) – Maxime

+0

Если У меня был код, который я мог видеть для себя (-: Я знаю, что реагируют только на новый/измененный элемент. Но может ли Angular сделать то же самое? –

ответ

0

Я обнаружил, что для плунжера, созданного с угловыми 2 и ngrx/store. В ваших веб-браузерах devtools легко увидеть, что обрабатываются только измененные элементы. Поэтому в этом отношении углы и реакции одинаковы.

"plnkr.co/edit/Hb4pJP3jGtOp6b7JubzS?p=preview"

1

В угловых V2 мы имеем 2 типа компоненты Stateful (Smart) и Statless. Средства (немой)

Stateful: Заботится о том, как все работает.

Statless: Заботится о том, как выглядят вещи.

ChangeDetectionStrategy:

Если вы не определен какой-либо стратегии для компонента, то ChangeDetection всегда будет «перезапуск» этот компонент. В случае стратегии OnPush он обновляет себя только в том случае, если какой-либо из входов изменяется, но этот случай работает только для таких объектов, как String, Number not for Objects или Arrays.

Так с ngrx/магазин и ES6 вы можете создать непреложным Массивы (не единственный путь) как

case ADD_TODO: 
return [...state, action.payload]; 
case UPDATE_TODO: 
return state.map(todo => todo.id === action.payload.id ? action.payload : todo); 

Затем вы создадите компоненты несделанного и TODO

<todos [todos]="todosNgRx$ | async"></todos> 

Этот компонент будет получить список todos и повторно отобразить второй компонент Todo.

<todo *ngFor="let todo of todos" [todo] = "todo"></todo> 

Этот компонент немой, содержит только данные.
Вам необходимо указать ChangeDetectionStrategy.OnPush, поэтому обновляются только обновления в случае todo. И если вы добавите новый todo ngFor, новый компонент Todo и остальная часть списка не будут обновлены.

Надеется, что это помогает