Как вызвать селектор ngrx внутри другого селектора (который принимает параметр для вычисления)

Я создал два селектора

  1. Чтобы получить все сети - export const getAllNetworks = createSelector(getState, state => state.networks);

  2. получить устройства для каждой сети

              createSelector(getAllNetworks, network => {
        const selectedNetwork = network.filter(net => net.id === networkId);
        return selectedNetwork[0]?.allDevices;
      });
    
    

Я хотел создать третий селектор, который использует первый селектор для получения сетей, а затем использует второй селектор для получения дополнительных данных.

      export const something = createSelector(
  getAllNetworks, (networks) => {
    networks.map(

      // How can I call the selector selectNetworkDevices by passing the network ID here and get the devices [ex: selectNetworkDevices(network.id)]

    )
  }
)

1 ответ

Вы можете использовать разные селекторы на основе других, например:

      export const selectUsers = createSelector(getState, (state) => state.users);

export const selectAccounts = (accountId?: string) => 
 createSelector(getState, (state) => 
   accountId ? state.accounts[accountId] : {}
 );

export const something = (accountId?: string) => 
  createSelector(
    selectUsers,
    selectAccounts(accountId),
    (usersData, accountsData) => {
      // some logic
      return accountId ? 'an account id was provided' : 'no-id'
    }
  )

В вашем компоненте вы можете вызвать этот селектор, предоставив параметр или нет:

      ngOnInit(): void {
  this.store.select(something());  // without parameter
  this.store.select(something('anAccountId')); // with parameter
}

Подробнее здесь: ссылка

Другие вопросы по тегам