🦉 Класс Observer(Наблюдатель) 🦉
Owl должен иметь возможность реагировать на изменения состояния. Например, всякий раз,
когда состояние компонента изменяется, Owl необходимо перерисовать его. Чтобы помочь с
этим, есть класс Observer. Его работа заключается в наблюдении за состоянием объекта
(или массива) и реагировании на любые изменения. Observer реализован с помощью
объекта Proxy
. Обратите внимание, что это означает, что он не будет работать в
старых браузерах.
Обратите внимание, что Observer
используется хуками useState
и useContext
. Именно
так большинство приложений Owl создают наблюдателей. Для большинства случаев
использования нет необходимости напрямую создавать экземпляр наблюдателя.
Пример
Например этот код убде отображать update
в консоли
For example, this code will display update
in the console:
const observer = new owl.core.Observer();
observer.notifyCB = () => console.log("update");
const obj = observer.observe({ a: { b: 1 } });
obj.a.b = 2;
Этот пример показывает, что наблюдатель может наблюдать за вложенными свойствами.
Ссылка
observe Наблюдатель может наблюдать за несколькими значениями с помощью метода
observe
. Этот метод принимает объект или массив в качестве аргумента и возвращает
прокси (который сопоставляется с исходным объектом/массивом). С помощью этого прокси
наблюдатель может обнаружить любое изменение любого внутреннего значения.
Регистрация обратного вызова Всякий раз, когда наблюдатель видит изменение
состояния, он вызывает свой метод notifyCB
. Никакой дополнительной информации
при обратном вызове не передается.
deepRevNumber Каждое наблюдаемое значение имеет внутренний номер версии, который увеличивается каждый раз, когда значение наблюдается. Иногда бывает полезно получить этот номер:
const observer = new owl.core.Observer();
const obj = observer.observe({ a: { b: 1 } });
observer.revNumber(obj.a); // 1
obj.a.b = 2;
observer.revNumber(obj.a); // 2
revNumber
также может возвращать 0, что указывает на то, что значение не наблюдается.