Динамическое добавление контента в указанный дочерний элемент 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
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
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

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