![](/img/trans.png)
[英]Uncaught ReferenceError: Cannot access 'NgxMatCalendar' before initialization?
[英]Api with injected Endpoints to Redux RTK query causing "ReferenceError: Cannot access 'baseApi' before initialization"
我設置了 redux RTK 應用程序,並且確實設置了帶有 RTK 查詢的服務。 我注意到雖然我們需要很多端點,但看起來 RTK Query 推薦的方法是使用代碼拆分來增加 API 服務。 這也很順利,適合我的情況,因為我需要一個用於所有應用程序的dynamicBaseQuery
以便在鏈接中注入所選語言。
然而, 文檔還建議將 API 減速器路徑添加到 RTK 存儲減速器,但正如高級查詢文檔所述:
...apiSlice 和extendedApiSlice 是相同的object,但在這里參考extendedApiSlice object 而不是apiSlice 會有所幫助,以提醒我們自己。 (如果您使用的是 TypeScript,則這一點更為重要,因為只有 extendedApiSlice 值具有為新端點添加的類型。)
所以這也適用於將 api 減速器添加到路徑中,因為如果我只將 baseApiSlice 添加到減速器中,我會得到ReferenceError: Cannot access 'baseApi' before initialization
authApi
基本上是authApi = baseApi.injectEndpoints...
並且使用authApi
在普通 RTK 切片 ( AuthSlice
) 中添加匹配器
builder.addMatcher(authApi.endpoints.login.matchFulfilled
我嘗試將它們全部放入減速器中(類似於):
reducer: {
[AuthSlice.name]: AuthSlice.reducer,
[baseApi.reducerPath]: baseApi.reducer,
[authApi.reducerPath]: authApi.reducer,
[buildingsApi.reducerPath]: buildingsApi.reducer, ...
但我遇到了同樣的錯誤(不建議這樣做,因為我基本上會導入相同的api
3 次,我也讀過它會導致錯誤)。
如果我只是添加authApi
減速器,似乎一切都很順利,我什至可以使用 buildingApi,但它只是不能正確填充。 此外,如果我需要在buildingsApi.endpoints
上使用addMatcher
,它將再次失敗,並出現ReferenceError: Cannot access 'baseApi' before initialization
。
我想提一下,我還向商店中間件添加了baseApi
,如下所示: middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(baseApi.middleware)
我真的不知道如何正確設置 RTK Query 使用非常感謝代碼拆分和這方面的任何幫助。
非常感謝!
PS:我看到的唯一選擇是設置單獨的查詢而不是使用code splitting
,並且只是使dynamicBaseQuery
可導出。 但我認為這並不理想,而且它似乎也不是文檔推薦的方式。
萬一其他人遇到類似的問題, ReferenceError: Cannot access 'baseApi' before initialization
實際上是一個循環依賴錯誤。
就我而言,我實際上是在baseApi
中導入AuthSlice
以獲取用戶語言並將其添加到dynamicBaseQuery
。 通過使用 cookie 獲取當前語言來修復循環依賴。
代碼在沒有來自AuthSlice
的extraReducers
的情況下工作,因為在這種情況下,從切片到 api 沒有任何內容,但是一旦我使用addMatcher(authApi.endpoints
添加了extraReducers
,錯誤就會再次出現。
我在 github 上找到了一些關於這個的東西,但我真的很難發現循環依賴
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.