Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Які основні сутності в Akita?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**В Akita три основні сутності**: Store (зберігає дані), Query (віддає дані компонентам) і Service (керує діями та API-запитами). **Ключове:** цих трьох частин достатньо для повноцінного реактивного сховища, а додатково є EntityStore, UI Store і Plugins.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняВ 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 проста: три частини, і в тебе вже повноцінне реактивне сховище.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.