仅当两个选择器都发出值时才组合选择器



我有两个选择器selectAllJournals, selectAllAccounts在不同的时间发出值

一旦从selectAllJournals发出一个值,组合选择器就需要从selectAllAccounts获得一个值。现在我检查映射函数mapJournalListViewModel,如果selectAllAccounts发出值。但这感觉很尴尬。我看到的一个问题是mapJournalListViewModel将被调用两次:一次是从selectAllJournals和selectAllAccounts发出的值。是否有更好的方法,使mapJournalListViewModel只在两个选择器发出值时被调用?

export const selectJournalListViewModel = createSelector(
selectAllJournals,
selectAllAccounts,
(journals, accounts) =>
journals.map((j) => mapJournalListViewModel(j, accounts))
);

function mapJournalListViewModel(
journal: Journal,
accounts: Account[]
): JournalListViewModel {
return {
id: journal.id,
date: journal.date,
debitAccountName: accounts?.find(
(a) => a.id === journal.transactions[0].account.id
)?.name!,  // <--- accounts checked for null because the selector might emit values only later

};

使用条件逻辑:

export const selectJournalListViewModel = createSelector(
selectAllJournals,
selectAllAccounts,
(journals, accounts) =>
(journals && accounts) ? journals.map((j) => mapJournalListViewModel(j, accounts)) : []
);

最新更新