天天看點

SAP Spartacus B2B User list頁面的資料加載邏輯

list.service.ts的getData方法裡的this.load觸發時,this實際指向UserListService:

SAP Spartacus B2B User list頁面的資料加載邏輯

觸發點還是list頁面的async pipe:

SAP Spartacus B2B User list頁面的資料加載邏輯

ListService在運作時的執行個體化成UserListService,在userCmsConfig裡完成:

SAP Spartacus B2B User list頁面的資料加載邏輯

getUserList:調用this.store.select:

SAP Spartacus B2B User list頁面的資料加載邏輯

getUserList的實作:

SAP Spartacus B2B User list頁面的資料加載邏輯

這裡才執行createSelector?

SAP Spartacus B2B User list頁面的資料加載邏輯

createSelector的傳回結果:

SAP Spartacus B2B User list頁面的資料加載邏輯

傳回一個Observable對象:

SAP Spartacus B2B User list頁面的資料加載邏輯

select的輸入參數:輸入一個函數,該函數的類型定義:

接受一個輸入參數,類型為T,輸出參數為K,整個select調用傳回的類型為:Observable:

SAP Spartacus B2B User list頁面的資料加載邏輯

問題來了:this.store.select輸入的,到底是selector,還是純函數projection?

從接口看,是一個selector:

SAP Spartacus B2B User list頁面的資料加載邏輯

這裡開始加載list:

SAP Spartacus B2B User list頁面的資料加載邏輯

先take,再map:

SAP Spartacus B2B User list頁面的資料加載邏輯

注意,這裡傳回的是string,而不是Observable:

SAP Spartacus B2B User list頁面的資料加載邏輯

準備加載B2BUsers,參數為userId和params:

SAP Spartacus B2B User list頁面的資料加載邏輯
SAP Spartacus B2B User list頁面的資料加載邏輯
SAP Spartacus B2B User list頁面的資料加載邏輯
SAP Spartacus B2B User list頁面的資料加載邏輯

這個return語句會觸發reducer的狀态遷移:

SAP Spartacus B2B User list頁面的資料加載邏輯

這個payload裡怎麼隻有一條資料?

SAP Spartacus B2B User list頁面的資料加載邏輯

似乎是在一個循環裡被反複觸發:

SAP Spartacus B2B User list頁面的資料加載邏輯

确實是在循環裡:高階reducer

SAP Spartacus B2B User list頁面的資料加載邏輯
SAP Spartacus B2B User list頁面的資料加載邏輯

繼續閱讀