嘿,我对NgRedux不太了解,我无法在互联网上找到任何信息,因此希望这里有人可以帮助我。
让我们说这是我的减根剂:
interface RootState {
content: ContentState;
layout: LayoutState;
metadata: MetadataState;
search: SearchState;
}
然后这是我的搜索还原器:
export interface SearchState {
engineParams: SearchEngineParams;
searchHistory: SearchHistory[];
searchRestrictions: SearchRestrictions;
}
我这样设置:
...
const searchReducer = createReducer<SearchState>({}, INITIAL_STATE);
...
const rootReducer = combineReducers<RootState>({
content: contentReducer,
layout: layoutReducer,
metadata: metadataReducer,
search: searchReducer,
});
我的问题是当我在SearchState中选择搜索属性时:
class SearchService {
...
@select(['search', 'engineParams'])
public searchEngineParams$: Observable<SearchEngineParams>;
private sub: Subscription;
...
constructor(...) {
this.sub = this.searchEngineParams$.subscribe((params) => {
console.log('search params changed!', params);
});
}
...
}
仅在初始化期间调用console.log的订阅,但是当engineParams内部的属性发生更改时,则不会发生任何事情。
SearchEngineParams是一个看起来像这样的对象。
class SearchEngineParams{
...
constructor(
public currentSearchType: SearchType,
public searchTypeStates: SearchTypeState,
) { }
public get currentSearchTypeState() {
return this.searchTypeStates[this.currentSearchType];
}
...
}
当我更改当前搜索类型状态时,我无法弄清楚为什么观察不到的对象不发光,这是处理搜索类型更改的简化器(我将沉浸式用于不可变状态)
reducer.on(setSearchType, (state, payload: SetSearchTypePayload) => {
return produce(state, (draftState) => {
draftState.engineParams.currentSearchType = payload.searchType;
});
});
有人知道为什么这没有按预期进行吗?我的第一个猜测是redux无法与对象/原型正常工作,而我的第二个猜测是redux不会针对子属性发出更改,因为我选择的是search.engineParams而不是search.engineParams.currentSearchType,但这只是猜测,因为我无法在任何地方都可以找到有关这些主题的任何文档。
具体说明为什么这对我不起作用将是令人惊讶的,但是,指向一些可以帮助我弄清楚这一点的文档的链接将非常有用,谢谢。