🦉 Класс 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, что указывает на то, что значение не наблюдается.