Строгий менеджер состояний для приложений на javascript
Query - это класс, предлагающий функциональность, отвечающую за запросы к store.
Вы можете думать, что запрос похож на запросы к базе данных. Его функция-конструктор получает в качестве параметров собственное хранилище и, возможно, другие классы запросов.
Query могут общаться с другими запросами, объединять объекты из разных хранилищ и т. Д.
Чтобы создать Query, вам нужно расширить класс Query.
import { Query } from '@datorama/akita';
export class SessionQuery extends Query<SessionState> {
constructor(protected store: SessionStore) {
super(store);
}
}
С этой настройкой вы получите запрос с помощью следующих методов:
select<R>(project?: (store: S) => R): Observable<R>
Наряду с setState, select является одним из фундаментальных строительных блоков, который лежит в основе того, что заставляет Акиту работать. Он выбирает часть данных из store:
import { SessionQuery } from './config/session.query';
class NavComponent {
isLoggedIn$ = this.sessionQuery.select(session => !!session.token);
constructor(private sessionQuery: SessionQuery) {}
}
Мы рекомендуем размещать логику для базовых запросов внутри класса запросов, чтобы он мог быть более читабельным и многократно используемым.
# session.query.ts
Injectable()
export class SessionQuery extends Query<SessionState> {
isLoggedIn$ = this.select(session => !!session.token);
constructor(protected store: SessionStore) {
super(store);
}
}
# nav.component.ts
class NavComponent {
isLoggedIn$ = this.sessionQuery.isLoggedIn$;
constructor(private sessionQuery: SessionQuery) {}
}
Метод select() возвращает наблюдаемую информацию, которая вызывает внутреннюю функцию diverUntilChanged(), что означает, что она будет срабатывать только при изменении состояния, то есть при появлении новой ссылки.
selectOnce<R>(project: (store: S) => R): Observable<R>
То же, что select(), но срабатывает только один раз (внутренне отписывается после одного next()).
this.query.selectOnce(state => state.key);
getValue()
Метод getValue() возвращает необработанное значение хранилища.
this.query.getValue();
selectLoading()
Выберите состояние загрузки магазина:
selectError()
Выберите состояние ошибки магазина:
this.query.selectError();
Обратите внимание, что методы выбора Query всегда будут сначала выдвигать начальное значение.