createSignal¶
Сигналы - это самый простой реактивный примитив. Они отслеживают одно значение (которым может быть любой объект JavaScript), изменяющееся с течением времени.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Значение сигнала в начале равно переданному первому аргументу initialValue
(или неопределено, если аргументов нет). Функция createSignal
возвращает пару функций в виде двухэлементного массива: геттер (или аксессор) и сеттер. При обычном использовании этот массив можно деструктурировать в именованный сигнал следующим образом:
1 2 |
|
Вызов геттера (например, count()
или ready()
) возвращает текущее значение Сигнала.
Важным для автоматического отслеживания зависимостей является то, что вызов геттера в области отслеживания приводит к тому, что вызывающая функция становится зависимой от этого Сигнала, поэтому при обновлении Сигнала эта функция будет запущена заново.
Вызов сеттера (например, setCount(nextCount)
или setReady(nextReady)
) устанавливает значение Сигнала и обновляет его (вызывая повторное выполнение зависимых функций), если значение действительно изменилось (подробнее см. ниже). В качестве единственного аргумента сеттер принимает либо новое значение сигнала, либо функцию, сопоставляющую последнее значение сигнала с новым значением. Обновленное значение также возвращается сеттером. В качестве примера:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Если вы хотите сохранить функцию в Signal, вы должны использовать форму функции:
1 |
|
Однако функции не рассматриваются специально как аргумент initialValue
в createSignal
, поэтому можно передавать начальное значение функции как есть:
1 |
|
Параметры¶
Наименование | Тип | По умолчанию | Описание |
---|---|---|---|
equals | false | ((prev: T, next: T) => boolean) | === | Функция, определяющая, изменилось ли значение Сигнала. Если функция возвращает true, то значение Сигнала не обновляется и зависимые элементы не запускаются повторно. Если функция возвращает false , то значение Сигнала будет обновлено и зависимые элементы будут запущены повторно. |
name | string | Имя для сигнала. Это полезно для отладки. | |
internal | boolean | false | Если true , то Signal не будет доступен в devtools. |
equals
¶
Опция equals
может быть использована для настройки проверки равенства, используемой для определения того, изменилось ли значение Signal. По умолчанию используется строгая проверка равенства (===
). Если необходимо использовать другую проверку равенства, то в качестве опции equals
можно передать пользовательскую функцию. Пользовательская функция будет вызвана с предыдущим и следующим значениями Signal в качестве аргументов. Если функция вернет true
, то значение Signal не будет обновлено и зависимые функции не будут перезапускаться. Если функция вернет false
, то значение Сигнала будет обновлено, а зависимые элементы будут повторно запущены.
1 2 3 |
|
Вот несколько примеров использования этого варианта:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
name
¶
Опция name
может быть использована для присвоения сигналу имени. Это полезно для отладки. Имя будет отображаться в devtools.
1 2 3 |
|
internal
¶
Опция internal
может быть использована для скрытия сигнала от devtools. Это полезно для сигналов, которые используются внутри компонента и не должны быть доступны пользователю.
1 2 3 |
|