Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 避免重新渲染子组件NgRx-Firestore_Javascript_Angular_Google Cloud Firestore_Ngrx - Fatal编程技术网

Javascript 避免重新渲染子组件NgRx-Firestore

Javascript 避免重新渲染子组件NgRx-Firestore,javascript,angular,google-cloud-firestore,ngrx,Javascript,Angular,Google Cloud Firestore,Ngrx,我正在寻找一种方法来解决这样一种情况:模型的1个属性从firestore更新,但所有细节(子)组件都被重新渲染 例如,我的模型有作者、标题、图像和类似计数。更新NumberOfLikes后,Firestore将发送一个修改的操作,有效负载将通过ngrx中的my ItemReducer: case actions.MODIFIED: return itemAdapter.updateOne({ id: action.payload.url,

我正在寻找一种方法来解决这样一种情况:模型的1个属性从firestore更新,但所有细节(子)组件都被重新渲染

例如,我的模型有作者、标题、图像和类似计数。更新NumberOfLikes后,Firestore将发送一个修改的操作,有效负载将通过ngrx中的my ItemReducer:

   case actions.MODIFIED:
        return itemAdapter.updateOne({
            id: action.payload.url,
            changes: action.payload
        }, state);
这只会更新我的项目数组中的一个对象,但是当子组件为该特定项目更新时,它会重新呈现所有4个属性,而不仅仅是likeCount,从而导致恼人的闪烁

我认为我在父组件和子组件中实现的ChangeDetectionStrategy在这里没有帮助。想知道是否有办法让子组件只更新likeCount属性

据我所知,ngrx正在传递一个新的引用,我使用的异步管道也在重新呈现子组件

谢谢你抽出时间。如有任何建议,我将不胜感激

容器组件:

import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';
import { Item } from './../../../models/item';

@Component({
    selector: 'app-specials',
    styleUrls: ['specials-list.component.scss'],
    template: `
<div *ngIf="items$ | async; let items; else noItems">
  <app-item-detail
    *ngFor="let item of items"
    [detail]="item">
  </app-item-detail>
</div>`,
    changeDetection: ChangeDetectionStrategy.OnPush
})
...
ngOnInit() {
    this.items$ = this.store.select(fromItem.selectAll);
}
...

最后才把
likecount
拉到一个服务中。从一开始就应该这样设计

import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';
...
@Input()
detail: Item;