javascript - Ngrx Väljare: createSelector VS ren rxjs


Hej fantastiska internetmänniskor,

Jag försöker förstå avancerade användningar av ngrx-selektorer och arbetar med att ta till mig den här artikeln: ngrx-selektorer

Det finns exempel som visar createSelectors och lite ren rxjs-magi. Finns det någon fördel med att använda det ena jämfört med det andra. De metoder som är av intresse är getAllActiveUsersNGRX kontra getAllActiveUsersRXJS.

Exempel

const selectUserStore = (state: GlobalState) => state.userStore;

const getAllUsers = createSelector(
    selectUserStore ,
    (state: UserState) => state.allUsers
);

const getAllActiveUsersNGRX = createSelector(
    getAllUsers,
    (users: IUser[]) => users.filter(user => (user.active === true))
);

const getAllActiveUsersRXJS = pipe(
    select(getAllUsers),
    map((users: IUser[]) => users.filter(user=> (user.active === true)))
);

Jag vet att använda dem med butiken kommer också att vara annorlunda

T.ex.

store.pipe(select(getAllActiveUsersNGRX));

VS

store.pipe(select(getAllActiveUsersRXJS));

Förutom det sätt de används med butiken, finns det några fördelar som jag ännu inte har förstått eller är det enbart kodningspreferens?

Tack

Svar #1

Utifrån ser de likadana ut. Skillnaden är hur ofta (users: IUser[]) => users.filter(user => (user.active === true))-funktionen kommer att anropas. Eftersom createSelector skapar en memorerad funktion.

Selector-funktionen som returneras genom att kalla på createSelector eller createFeatureSelector har initialt ett memorerat värde på null. Efter att en selector anropas första gången lagras dess memorerade värde i minnet. Om selectorn därefter anropas med samma argument kommer den att returnera det memorerade värdet. Om selectorn sedan anropas med olika argument kommer den att beräkna om och uppdatera sitt memorerade värde.

ngRx-dokumentation

Relaterade artiklar