什么是更好的做法?! 因为ngrx给我们疼痛,我们可以听取状态,我们可以从任何组件发出动作。
所以我写了一些简单的待办事项列表应用程序:
容器:TodosListComponent
@Component({
selector: 'todos-list',
template: `
<ul>
<li *ngFor="let todo of list">
<todo [todo]="todo"></todo>
</li>
</ul>
`,
})
export class TodosListComponent implements OnInit {
public list;
constructor(private store: Store<any>) { }
ngOnInit() {
this.list = this.store.select('todos','list');
}
}
儿童:Todo Compnent
@Component({
selector: 'todo',
template: `
<span>{{ todo.content}}</span>
<span (click)="delete(todo)"> X </span>
`,
})
export class TodoComponent implements OnInit {
@Input() todo: Todo;
constructor(
private store: Store<any>
) { }
ngOnInit() {
}
delete(todo) {
this.store.dispatch({type: 'DELETE_TODO', payload: todo});
}
}
因此,通过这种方式,我们在TodosListComponent上侦听列表(状态) 然后我们可以从任何组件更改列表,在这种情况下,我们从todo组件中删除todo,列表将由商店自动更新。
但是其他方式是使用@Output(事件发射器),然后从容器中调度动作?
我的问题是哪种方式更好,为什么?
我认为第一个更好,因为如果我们有更复杂的例子,例如监听结果(状态)的数据网格元素,我们可以从没有复杂事件发射器的其他组件更改结果(状态)
我填写使用@Output
是不需要的,因为商店让我们能够在每个地方倾听和发送行动。
但更好的是什么?为什么? :)
我不需要代码审核,因为我询问的数据流与此应用代码无关(例如)。
谢谢!
答案 0 :(得分:2)
在ngRx中,您有智能(容器)和哑(子)组件。因此,在您的情况下,列表组件是智能组件,因为它必须订阅来自州的待办事项。 Todo组件对于哑组件来说是一个很好的例子。它是listcomponent中的一个孩子,不必知道ngStore的存在。
你为什么要这样做?它是一种降低组件复杂性的方法。如果您有大型应用程序,则很难跟踪所有知道该商店的组件。
更多详细信息:
答案 1 :(得分:0)
我认为使用ngrx
构建应用程序是创建应用程序的更好方法。