簡體   English   中英

Api 注入端點到 Redux RTK 查詢導致“ReferenceError:初始化前無法訪問'baseApi'”

[英]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 獲取當前語言來修復循環依賴。

代碼在沒有來自AuthSliceextraReducers的情況下工作,因為在這種情況下,從切片到 api 沒有任何內容,但是一旦我使用addMatcher(authApi.endpoints添加了extraReducers ,錯誤就會再次出現。

我在 github 上找到了一些關於這個的東西,但我真的很難發現循環依賴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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