Вставьте React "root" dom, чтобы он был на странице программно

Допустим, в моем HTML-файле есть:

<div id = "root"></div>

Чтобы отобразить элемент React в этом узле DOM, я передаю его в ReactDOM.render ():

const element = <h1>Hello, world</h1>;
ReactDOM.render(element, document.getElementById('root'));

Но что, если этот узел создается программно, после того, как, скажем, пользователь входит в систему, поэтому его рендеринг задерживается. Для иллюстрации я пытаюсь сделать что-то вроде:

<script type = "text/javascript">
        setTimeout(function(){
            document.body.innerHTML += '<div id = "root" data-user = "1"></div>'
        }, 3000)
    </script> 

Это не работает. ReactDOM ничего не находит на первом проходе, когда ищет document.getElementById('root'), и поэтому ничего не отображает. Есть ли способ сделать это динамически?

Рассматривали ли вы загрузку файлов JS после рендеринга DOM? Добавляете JS в конец страницы?

itsdarrylnorris 01.10.2018 07:07
Чтобы проиллюстрировать, я пытаюсь сделать что-то вроде - это нужно делать внутри приложения React, чтобы у вас был полный контроль над приоритетом.
Estus Flask 01.10.2018 07:53
Поведение ключевого слова "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) для оценки ваших знаний,...
1
2
465
1

Ответы 1

Попробуй это:

<html>
<head>
	<title>Parcel Sandbox</title>
	<meta charset = "UTF-8" />
</head>
<body id = "body">
	<script src = "https://unpkg.com/babel-standalone@6/babel.min.js"></script>
	<script crossorigin src = "https://unpkg.com/react@16/umd/react.development.js"></script>
	<script crossorigin src = "https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
	<script type = "text/babel">
		document.getElementById("body").innerHTML = `
		     <div id = "app"></div>
		`; 

		const name = 'Josh Perez'; 
		const element = <h1>Hello, {name}</h1>; 
		ReactDOM.render( element, document.getElementById('app') );
	</script>
</body>
</html>

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