NgRx — это state management библиотека для Angular, основанная на Redux. Она использует три ключевых концепции: Actions, Reducers и Effects. Рассмотрим каждую из них подробно.
Actions — это простые объекты, которые описывают событие в приложении. Они содержат:
type
— уникальная строка, описывающая действие (например, [User] Load Users
).payload
(опционально) — данные, связанные с действием.export const loadUsers = createAction(
'[User] Load Users',
props<{ users: User[] }>()
);
Как работают Actions?
store.dispatch(action)
.Reducers — это чистые функции, которые:
state
) и действие (action
).const userReducer = createReducer(
initialState,
on(loadUsers, (state, { users }) => ({ ...state, users })),
on(addUser, (state, { user }) => ({ ...state, users: [...state.users, user] }))
);
Ключевые особенности Reducers:
Effects — это механизм для обработки побочных эффектов (например, HTTP-запросов). Они:
Actions
).Store
.loadUsers$ = createEffect(() =>
this.actions$.pipe(
ofType(loadUsers),
switchMap(() => this.userService.getUsers().pipe(
map(users => loadUsersSuccess({ users })),
catchError(error => of(loadUsersFailure({ error })))
)
)
);
Как работают Effects?
loadUsers
).loadUsersSuccess
.loadUsersSuccess
и обновляет состояние.NgRx помогает управлять состоянием приложения предсказуемо и масштабируемо, разделяя логику на отдельные слои.