Які основні сутності в 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
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.