Appearance
Atom
ts
import { atom, Atom } from "@dpg.gg/core/store";Overview
Atom представляет собой обертку над данными для управления и остлеживания состояния.
ts
const num = atom(1); // Hook for new Atom(1);
// Изменение значения
num.set(2);
// Получение актуального значения
num.get();
// Подписка на изменения
num.on("change", console.log);Определенно можно использовать Proxy для подобных отслеживаний, и мы не имеем ничего против данного подхода, однако мы попытались максимально упростить и унифицировать данный процесс для ускорения написания кода.
Как вы могли заметить выше, можно создавать Atom двумя способами atom() и new Atom(). Они ни чем не отличаются, и хуковая реализация atom(...) под капотом создает все тот же new Atom(...), т.е. является алиасом
Arguments
initalValue
- Type:
any
При инициализации атома можно передавать начальное значение, которое не будет вызывать изменения
ts
atom(8);
new Atom("text");options
- Type:
{ readonly?: boolean; }
Объект с одной доступной опцией readonly. Данная опция позволяет отключить возможность вснесения изменений в данный store через метод set-value
ts
const num = atom(8, { readonly: true });
num.set(9); // throw ErrorMethods
get()
Возвращает актуальное значение атома.
ts
const num = atom(8);
console.log(num.get()); // 8
num.set(num.get() + 1);
console.log(num.get()); // 9set(value)
- Arg
value: any
Присвоение нового значения атому. В случае если данные изменились, будет вызвано событие change чтобы уведомить подписчиков
ts
const num = atom(8);
console.log(num.get()); // 8
num.set(num.get() + 1);
console.log(num.get()); // 9update(fn)
- Arg
fn: Updater<T> = (value: T) => T
Работает аналогично методу set, однако в качестве значения принимает функцию, которая позволяет взаимодействовать с текущим значением атома. Возвращаемое значение fn будет присвоено
ts
const page = atom(1);
document.querySelector(".next-page").addEventListener("click", () => {
page.update((n) => n + 1);
});
document.querySelector(".prev-page").addEventListener("click", () => {
page.update((n) => (n > 1 ? n - 1 : 1));
});once, on, off, emit
Это методы прослушивателя события, подробнее можно посмотреть на соответствующей странице EventEmitter
Events
change
- Arg
cb: (newVal: T, oldVal: T)
Событие вызывается каждый раз, когда вносятся изменения в atom через методы set и update.
Это событие необходимо для подписки на изменения атома.
ts
const num = atom(1); // Hook for new Atom(1);
num.on("change", console.log); // return 2, 1 at single row after set
num.set(2);