Open whymolchanov opened 4 years ago
Нашел вот такой репозиторий https://github.com/facebook/react-devtools/tree/v3 Это место где раньше хранилось react-devtools (до того как его перенесли в react) У него есть debug режим. Это позволит посмотреть каким образом (через какое API итд) он получает данные о VirtualDOM.
Элементы VirtualDOM называются fibers. В react-dev-tools есть множество методов как получить элемент зная fiberId, как найти fiberId элемента. Однако все они требуют доступа до агента (который является частью react-dev-tools, который не хотелось бы тянуть как зависимость) или renderer-а.
Чтобы нам хотелось получить - доступ до ReactElement-а, на который указывает указатель мыши.
Как самый простой вариант, мы бы могли пробрасывать название зоны в обертку VisibilitySensor-а и доставать ее оттуда. Это решение реально, однако не будем же мы пробрасывать в обертку VisibilitySensor какие-то дополнительные данные о зоне (а они со временем появятся).
@tashbenbetov правильно я понял что data-tid
атрибуты в DOM - это как раз и есть fiberId?
Хотя, возможно, история с добавлением названия зоны в VisibilitySensor - это не самое глупое промежуточное решение. Так мы сможем быстро уже отдать инструмент, который будет показывать хотя бы названия зон.
Думаю что первый шаг должен быть таким. @tashbenbetov что думаешь об этом?
@ymolchanov, Юра, думаю идея - отличная. Нам надо сейчас запуститься и иметь внешний интерфейс для всех заинтересованных. Остальное потом можем и переиграть без особых проблем.
Я добавил в VisibilitySensor.options новое поле - zoneName. zoneName прикрепляется к DOM посредством data-zone-name (дата атрибута).
Сейчас использование zoneName в VisiblitySensor выглядит так:
Нужно подумать вот о чем:
В extension добавил обход ветка дерева до корня с аккумуляцией всех зон по пути. Сейчас вывожу в консоль и выглядит это как-то так:
Кажется, нашел способ: VisibilitySensor так и так у нас имеет представление в DOM-дереве, почему бы нам не сделать так чтобы он сообщал о зонах с которыми он работает. Но пробрасывать в него данные руками - это моветон. Поэтом я задумался: "А может VisibilitySensor сам узнать названия зон?", оказалось еще как может.
Это будет выглядеть как-то так:
А вот как я это сделал: https://bb.yandex-team.ru/projects/OTT/repos/frontend/commits/cc31a000f5fcfe44ae89e582b782b52b2e221890
@tashbenbetov как и всегда, мне очень важно твое мнение. Если получится найти минутку и высказаться - буду очень рад. :)
Последнее понравилось!
Решил сделать по другому: в <div>
VisibilitySensor будет попадать только последняя зона, а не склеенное через _
множество зон.
Мотивация: позже мы добавим в эти <div>
еще и данные зоны (они есть в контексте), поэтому:
Завел заглушку для бота, которая пишет в консоль MouseEvent при наведении на элементы.