【发布时间】:2016-11-09 18:00:59
【问题描述】:
我正在使用 Angular 2 和 @ngrx/store.question 开展一个项目,了解一个好的做法以及如何做到这一点。
我开发了一个“网络查找器”来管理文件。所以我可以做一些基本的操作,比如复制、移动等。
我不会解释原因,因为这只是一个示例,但移动文件包含 3 个步骤:
- 逻辑:做一些验证。
- 调度一个动作A
- 发送操作 B
这 3 个步骤在我的角度组件内完成。我已经考虑过了,我认为最好只调度一个执行一些验证的动作并调度其他 2 个动作。
我为什么要这样做?首先,它更容易阅读
this._store.dispatch(copy(myFile));
而不是
// ...
// verifications
// ...
this._store.dispatch(action1(myFile, foo, bar));
this._store.dispatch(action2(myFile));
其次,我可以即时发送我的 copy 动作创建者而不会遇到任何副作用,因为验证将在动作内部执行。
实际上,我可以发送我的action1 和action2 而无需进行验证。
最后,我所有的逻辑都在我的行动中。我可以让我的组件保持简单并专注于他们的工作(管理 UI 等)。太棒了。
问题 1:好的做法?
这样做是个好主意吗?我想是的,但你的经历让我很感兴趣。
问题 2:如何?
如何做到这一点?我的动作创建者只是函数。我不能用Injectable 装饰它们并使用constructor 注入实例。
以下是动作创建者的示例:
import { Action } from '@ngrx/store'
export const NAVIGATE_TO_NODE:string = '[Browser] Navigate to node';
export const ADD_TO_SELECTION:string = '[Browser] Add to browser selection';
export const REMOVE_FROM_SELECTION:string = '[Browser] Remove from browser selection';
export const REMOVE_ALL_FROM_SELECTION:string = '[Browser] Remove all from browser selection';
export const navigateToNode:(nodeId: number, paneId?: number)=>Action = (nodeId: number, paneId?: number) => {
return {
payload: { nodeId, paneId },
type: NAVIGATE_TO_NODE
};
};
export const addToSelection: (addInfo: any)=>Action = (addInfo: any) => {
return {
payload: addInfo,
type: ADD_TO_SELECTION
};
};
export const removeFromSelection: (removeInfo: any[])=>Action = (removeInfo: any[]) => {
return {
payload: removeInfo,
type: REMOVE_FROM_SELECTION
}
};
export const removeAllFromSelection: ()=>Action = () => {
return {
payload: null,
type: REMOVE_ALL_FROM_SELECTION
}
};
我如何从那些动作创建者那里分派?
我已经使用 redux 作为 Redux 和 React 的实现,并且我创建了一个小包,允许我从动作创建者处分派:redux-thunk
【问题讨论】:
标签: angular typescript redux ngrx