- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在关注示例应用程序 ( https://github.com/ngrx/example-app ),我所有的存储、效果、操作都运行良好,但是当使用缩减程序文件中定义的选择器与容器文件中定义的选择器时,我会遇到奇怪的行为。 reducer 文件中定义的选择器返回函数,而容器文件中定义的选择器返回对象。我复制了代码片段来详细解释这一点。我想定义共享选择器,因此易于维护和升级,而不是每次都在容器组件中定义。如果有人阐明了解决此问题的方法,我将不胜感激。
//package.json
{
dependencies: {
"@angular/common": "2.2.1",
"@angular/compiler": "2.2.1",
"@angular/compiler-cli": "2.2.1",
"@angular/core": "2.2.1",
"@angular/forms": "2.2.1",
"rxjs": "^5.0.0-beta.12",
"@ngrx/core": "^1.2.0",
"@ngrx/effects": "^2.0.0",
"@ngrx/store": "^2.2.1",
"@ngrx/store-devtools": "^3.2.3",
"reselect": "^2.5.4"
....
},
}
//空间.reducer.ts//空间接口(interface)和 reducer
export interface SpaceState {
lastUpdated?: Date,
spacesLoaded: boolean,
spaces: {[key: string]: Space}
}
export const INITIAL_STATE: SpaceState = {
lastUpdated: new Date(),
spacesLoaded: false,
spaces: {},
};
export const getMap = (state: SpaceState) => state.spaces;
//应用程序.reducer.ts//组合状态接口(interface)和reducer
import * as fromSpace from "./space.reducer.ts";
export interface ApplicationState{
spaceState: SpaceState
}
export const INITIAL_APPLICATION_STATE: ApplicationState = {
spaceState: fromSpace.INITIAL_STATE
};
const reducers = {
spaceState: fromSpace.reducer
};
const reducer: ActionReducer<ApplicationState> = combineReducers(reducers);
export function reducer(state: any, action: any) {
return reducers;
}
export const getSpaceState = (state: ApplicationState) => state.spaceState;
export const getSpaceMap = (state: ApplicationState) => createSelector(getSpaceState, fromSpace.getMap);
//空间.容器.ts//容器组件
export class SpacesComponent implement onInit() {
constructor(private store: Store<ApplicationState>) {}
ngOnInit(): void {
this.store.select(getSpaceMap).subscribe(map => {
console.log("subscribe of space-map (using shared func) from container: " + map);
});
this.store.select((state) => state.spaceState.spaces).subscribe(map => {
console.log("subscribe of space-map (using container func) from container: " + map);
});
}
}
//容器输出
subscribe of space-map (using shared func) from container: function selector(state, props) {
for (var _len4 = arguments.length, args = Array(_len4 > 2 ? _len4 - 2 : 0), _key4 = 2; _key4 < _len4; _key4++) {
args[_key4 - 2] = arguments[_key4];
}
var params = dependencies.map(function (dependency) {
return dependency.apply(undefined, [state, props].concat(args));
});
return memoizedResultFunc.apply(undefined, _toConsumableArray(params));
}
subscribe of space-map (using container func) from container: [object Object]
最佳答案
您正在调用您的 getSpaceMap
选择器中似乎是 reselect 的 createSelector
并返回其结果,这就是它返回函数的原因。您的选择器正在返回另一个选择器。
相反,您应该将 createSelector
的结果分配给 getSpaceMap
:
export const getSpaceMap = createSelector(getSpaceState, fromSpace.getMap);
关于angular - ngrx/store 选择器返回函数而不是对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42472969/
我已经建立了这个IStore: export interface IStore { user: IUser; sources: ISourceRedux; } 其中IUser是: export
store.select()发出先前的存储状态。 是否可以订阅从“此刻开始”的更改,而无需获取先前的商店值(value)? 最佳答案 如果您对第一个发出的值不感兴趣,则应该可以使用 skip 运算符:
我已将我的 ngrx 代码更新到版本 8(使用 Action Creator 等),但我现在不知道如何在 NgRx Store DevTools 中使用 Dispatcher。 在我能够发送这样的操作
我正在开发一个新的 angular 4 plus @ngrx 4 项目。 我希望对加载的数据具有搜索功能。 例如,所有联系人信息都已加载到组件中。 联系人列表将过滤与搜索文本匹配的联系人姓名。 Ple
我正在使用 Ngrx 和 Angular2 构建一个移动应用程序。当用户从我的应用程序中注销时,我想清除商店?谁能知道该怎么做? 最佳答案 您应该在每个 reducer 中有一个明确的操作,这将清理商
我看到很多代码示例,其中 store.dispatch() 调用直接发生在 Angular 组件中。让一个愚蠢的 Angular 组件访问整个 Store 不是很糟糕吗?为什么不将所有的 Action
ngrx 的支持者声称 (here for example),您可以并且应该将所有应用程序状态保存在单个 Store 中。这表明 @ngrx/Store 可以用于缓存,因为缓存的内容是一种应用程序状态
我的应用程序在调度某个 Action 时没有调度某些 Action 或某些效果没有被调用,这有问题(请参阅 ngrx effect not being called when action is di
下面的代码片段有什么作用?取自此 file . export const getCollectionLoading = createSelector(getCollectionState, fromC
如果在同一个商店上分派(dispatch)多个操作: store.dispatch(new SomeAction()); store.dispatch(new SomeOtherAction());
我试图了解 typeof 效果在 ngrx 中是如何工作的,如果我在我的应用程序模块中声明: .... @NgModule({ imports: [ EffectsModule
任何人都可以建议在角度应用程序中使用 ngrx 进行状态管理时如何控制台记录状态。我已经浏览了 ngrx-store-logger,但是文档并不清楚如何创建元 reducer 和使用这个库。 最佳答案
我一直在阅读ngrx示例应用程序的代码并找到两个函数调用 createFeatureSelector('auth'); 和 createSelector(selectAuthState,(state:
我正在使用 Angular 8 和 NGRX 8。我有一个操作: export const loadEnvironment = createAction( LicencingActionTypes
我正在使用 Angular 8 和 NGRX 8。我有一个操作: export const loadEnvironment = createAction( LicencingActionTypes
以下示例取自 @ngrx example . 我以这种方式理解这个 observable。第一map函数获取 payload这是要添加的书,再次由mergeMap处理它保存到数据库的位置。 原码:
我目前正在使用 NgRx Data 对我项目中的几个实体执行 CRUD 操作。现在,我必须开发分页。因此,REST API 响应将如下所示: { "page": 1, "per_pag
如何在 NGRX 中访问(读取)另一个 reducer 中的 reducer 状态?这是一个与 this 非常相似的问题.NGRX 是否为此提供任何其他解决方案? 最佳答案 我在考虑做类似的事情时偶然
我正在尝试按属性过滤掉有效负载数据。 //reducer.ts case MessagesActionTypes.LOAD_Message_SUCCESS: { console.lo
我有效果类,我想根据路由器参数 ID 加载详细信息 @Effect() getDetails$ = this.actions$.ofType(DetailActions.GET_DETAILS).
我是一名优秀的程序员,十分优秀!