Skip to main content

Які основні сутності в Akita?

В Akita є лише три основні сутності - цього достатньо, щоб повністю керувати станом.

1. Store

Зберігає дані та відповідає за їх оновлення.

  • Це клас, де лежить увесь стан.
  • Ти сам задаєш, як він виглядає (об'єкт, масив, словник).
  • Змінюється через store.update(), store.set(), store.add(), store.remove() тощо.

Приклад:

ts
@StoreConfig({ name: 'todos' }) @Injectable() export class TodosStore extends Store<TodoState> { constructor() { super({ todos: [] }); // початковий стан } }

2. Query

Відповідає за читання даних зі Store.

  • Підписка на todos$, activeTodo$, count$ тощо.
  • Можна писати власні методи: selectById(id), isEmpty() тощо.

Приклад:

ts
@Injectable() export class TodosQuery extends Query<TodoState> { todos$ = this.select(state => state.todos); constructor(protected store: TodosStore) { super(store); } }

3. Service

Бізнес-логіка: запити до API, виклики методів Store.

  • Тут можна викликати http.get(), store.update() тощо.
  • Service не є частиною Akita, але це загальноприйнята структура.

Приклад:

ts
@Injectable() export class TodosService { constructor(private todosStore: TodosStore) {} add(todo: Todo) { this.todosStore.update(state => ({ todos: [...state.todos, todo] })); } }

Додатково (за потреби):

  • EntityStore - спеціальний вид Store для колекцій з ids і entities.
  • UI Store - для зберігання UI-стану (наприклад, loading, selectedId).
  • Plugins - наприклад, для devtools, undo/redo, persist.

Висновок:

Store - зберігає дані. Query - віддає дані компонентам. Service - керує діями.

Akita проста: три частини, і в тебе вже повноцінне реактивне сховище.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.