Код Senior Реализация с нуля обновлено

Реактивность через Proxy

Условие

createReactive(target, onChange): возвращает прокси, вызывающий onChange(путь, значение) при любой записи, включая вложенные объекты и удаление.

Что проверяют тесты

  • верхний уровень

  • вложенный путь

  • то же значение не будит

  • удаление

  • массив тоже отслеживается

  • чтение не портит данные

Как подойти

Так устроена реактивность Vue 3 и MobX. Ленивое оборачивание в get важно: прокси создаётся только для тех веток, к которым реально обращаются, а не для всего дерева сразу. Сравнение перед уведомлением - часть контракта, без него присвоение того же значения запускает каскад. Ограничения, которые стоит назвать: прокси не ловит операции над Map/Set без отдельных ловушек, и каждое чтение вложенного объекта создаёт новый прокси - для сравнения по ссылке нужен кеш.

Подсказки: 3
  1. Ловушка get возвращает новый прокси для объектных значений - так путь наращивается лениво.
  2. Сравнивай прежнее значение с новым, иначе запись того же значения поднимет лишний рендер.
  3. Удаление - отдельная ловушка deleteProperty.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.