Skip to content

Операторы

Слой совместимости включает распространенные операторы в стиле Effector.

sample

Используйте sample, чтобы взять состояние в момент, когда сработал другой юнит.

ts
sample({
  source: $count,
  clock: submitted,
  fn: (count, text) => `${text}:${count}`,
  target: saved,
});

С filter:

ts
sample({
  source: { prefix: $prefix, enabled: $enabled },
  clock: submitted,
  filter: ({ enabled }) => enabled,
  fn: ({ prefix }, value) => `${prefix}${value}`,
  target,
});

combine

Используйте combine для derived-сторов.

ts
const $fullName = combine(
  { firstName: $firstName, lastName: $lastName },
  ({ firstName, lastName }) => `${firstName} ${lastName}`,
);

split

Используйте split, чтобы разложить одно событие по веткам.

ts
const routed = split(submitted, {
  even: (value) => value % 2 === 0,
  odd: (value) => value % 2 === 1,
});

Payloads без совпадения попадут в routed.__.

createApi

Используйте createApi, чтобы создать несколько событий, обновляющих один стор.

ts
const api = createApi($count, {
  add: (count, amount: number) => count + amount,
  reset: () => 0,
});

api.add(1);
api.reset();

restore

Используйте restore, чтобы хранить payload события или результат эффекта.

ts
const submitted = createEvent<string>();
const $value = restore(submitted, "initial");

attach

Используйте attach, чтобы добавить состояние из стора в вызов эффекта.

ts
const requestFx = createEffect<{ token: string; id: number }, string>();
const $token = createStore("root");

const authorizedFx = attach({
  source: $token,
  effect: requestFx,
  mapParams: (id: number, token: string) => ({ token, id }),
});