DevGang
Авторизоваться

Akita

Строгий менеджер состояний для приложений на javascript

Query

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 всегда будут сначала выдвигать начальное значение.

Комментарии
Чтобы оставить комментарий, необходимо авторизоваться