簡體   English   中英

如何使“狀態中不存在功能名稱”路由器“...”ngrx/router-store 警告靜音

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM