[英]How to silence “The feature name ”router“ does not exist in the state…” ngrx/router-store warning
當我將“@ngrx/router-store”添加到我的項目時,它會在開發模式和單元測試結果中向應用程序控制台發送垃圾郵件,並顯示以下消息:
state 中不存在功能名稱“路由器”,因此 createFeatureSelector 無法訪問它。 確保它是使用 StoreModule.forRoot('router', ...) 或 StoreModule.forFeature('router', ...) 導入到加載的模塊中的。 如果默認 state 打算未定義,如路由器 state 的情況,則可以忽略此僅開發警告消息。
我嘗試將router
state 屬性類型設置為
router: null | RouterReducerState<SerializedRouterStateSnapshot>
和初始 state 值
router: null
但它與僅接受的routerReducer
類型沖突
RouterReducerState<SerializedRouterStateSnapshot>
如何禁用此警告? 老實說,我覺得這很煩人。
這對我有幫助:不要使用createFeatureSelector
創建路由器功能選擇器,而是使用createSelector
。
export const routerState = createSelector((state: State) => state.router, value => value)
出現此問題是因為createFeatureSelector
如果特征值等於undefined
會記錄警告。 上面的代碼等同於原始實現,但沒有日志。
更新:這是一個旨在解決問題的 PR 。
你的 switch 語句中是否有default return
?
default:
return state;
使用簡單的 function 嘗試 select 的路由器切片 state
export const selectRouter = (state: State) => state.router;
因為 createFeatureSelector(因此得名)用於選擇 FEATURE 模塊中添加的 state 切片
StoreModule.forFeature('feature1', reducers)
在這種情況下,您應該使用 createFeatureSelector
export const selectFeature1 = createFeatureSelector<State, Feature1State>('feature1');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.