С React я нахожусь внутри одного репозитория, а элементы HTML загружаются из другого репозитория, который я наблюдаю за использованием pageLoaded. Внутри updateHeader есть еще выбор элементов HTML и манипулирование атрибутами/классами.
useEffect(() => {
if (pageLoaded.status) {
if (someCondition) {
updateHeader(ubeName);
} else {
document.querySelector('.headerbar-menu').style.display = 'block';
if (document.querySelector('.headerbar-menu.affiliates-wrapper')) {
document.querySelector('.headerbar-menu.affiliates-wrapper').style.display = 'none';
}
}
}
}, [pageLoaded.status])
Проблема здесь, очевидно, в том, что мы не должны использовать querySelector, и я думаю, что это может вызвать некоторые неожиданные функциональные возможности. Элементы не оцениваются должным образом и не отображаются до тех пор, пока какая-либо часть состояния не изменится, то есть обработчик состояния прокрутки, поэтому при начальной загрузке страницы элементы не отображаются с их новыми атрибутами до прокрутки.
Я хотел бы попытаться разрешить использование useRef, но не имею прямого доступа к html. Есть ли способ динамически подключить ссылку к элементу без доступа к коду HTML?
Спасибо за ваше время и внимание!
хммм попался спасибо Брайан я ценю это. у вас есть другие идеи по моей проблеме? я пытался принудительно выполнить повторную визуализацию, установив некоторое состояние в конце манипуляции с html, но элементы по-прежнему не отображаются, если я каким-то образом не манипулирую страницей
Попробуйте использовать useEffect и настроить состояние для просмотра соответственно.
Лучший способ сделать это, на мой взгляд, в такой последовательности:
DOMSubtreeModified
или MutationObserver
DOMSubtreeModified
или MutationObserver
(или сохраните его, чтобы следить за обновлениями)Это позволяет использовать селекторы запросов безопасным и современным способом, не слишком далеко отходящим от рекомендаций React.
Спасибо за ответ! мы выяснили проблему, и я считаю, что это было вопросом условий гонки. Поместив useEffect в другой файл хуков, который имел более высокий приоритет, чем тот, в котором он уже был, он смог правильно отобразиться. однако это очень информативно, и я все равно назову это решением, так как я, вероятно, буду использовать это, когда мы будем искать подобное решение.