Динамическое добавление контента в указанный дочерний элемент React в зависимости от высоты области просмотра

Я реализовал доказательство концепции, чтобы проиллюстрировать, чего я пытаюсь достичь https://codesandbox.io/s/html-react-parser-forked-wcxv8?file=/src/index.js

Я отображаю содержимое статьи, которое извлекается из API, но для простоты я использовал файл example.html. Мне нужно проанализировать его с помощью html-react-parser, потому что нам нужно выполнить некоторые преобразования перед его рендерингом, но я пропустил эту часть, поскольку она не имеет отношения к объему этой проблемы.

После того, как мы проанализировали и визуализировали его, я добавил эффект для вставки рекламного баннера с расстоянием, равным удвоенной высоте области просмотра. Как видите, будет вставлено 4 или 5 баннеров, в зависимости от высоты вашего окна просмотра, но это не то количество баннеров, которое следует вставлять, поскольку статья продолжается, а условия все еще применяются. Следовательно, мы должны увидеть больше баннеров.

Что я делаю не так? Спасибо!

Справедливости ради, похоже, что ваши расчеты правильны с точки зрения того, куда вставлять рекламу, но правильная вставка не работает. Вы можете видеть, что первое объявление должно было быть вставлено в индекс 10, но на самом деле было вставлено в индекс 5. Я думаю, что это может быть связано с тем, что вы перебираете узлы ref, но фактически изменяете сам массив статей.

szczocik 21.12.2020 12:13

Это имеет смысл, но чтобы сохранить состояние, мне нужно изменить массив статей, верно @szczocik? Это вызовет повторный рендеринг со вставленной рекламой.

blacksoul 21.12.2020 12:16
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Раскрытие чувствительных данных
Раскрытие чувствительных данных
Все внешние компоненты, рассмотренные здесь до сих пор, взаимодействуют с клиентской стороной. Однако, если они подвергаются атаке, они не...
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Руководство ChatGPT по продаже мини JS-файлов
Руководство ChatGPT по продаже мини JS-файлов
JS-файл - это файл, содержащий код JavaScript. JavaScript - это язык программирования, который в основном используется для добавления интерактивности...
2
2
78
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Проблема не в количестве объявлений, а в их позиции. В вашем массиве статей 116 элементов, а в ref.current.children всего 56.

Чтобы количество дочерних элементов соответствовало узлам статьи, вы можете обернуть каждый элемент массива статей в отдельный диапазон. Таким образом, количество статей и дочерних элементов будет одинаковым, что позволит равномерно распределять рекламу. Вы можете увидеть это здесь:

https://codesandbox.io/s/html-react-parser-forked-gvvmd?file=/src/index.js

Я вижу, это работает. Однако это нарушит доступность и семантику контента, верно? –

blacksoul 21.12.2020 12:31

Я не уверен, но может быть так. Я думаю, что если это так, то решение @Scratch'N'Purr было бы лучше, поскольку оно очищает массив articles, а не отображает их все.

szczocik 21.12.2020 12:36
Ответ принят как подходящий

Похоже, что проанализированный HTML возвращает объект длиной 112, где индексы с нечетными номерами являются строковыми типами. Отфильтровав элементы, которые являются строками, и вставив их в index + viewPortDistance, вы получите правильные позиции вставки.

Я добавил операторы консоли, чтобы убедиться, что реклама действительно вставляется после правильных узлов.

https://codesandbox.io/s/html-react-parser-forked-0476i

Другие вопросы по теме