#javascript #reactjs
#javascript #reactjs
Вопрос:
Я тестирую разницу между реальным DOM и виртуальным DOM. Итак, я привожу пример с setInterval
отображением div
времени показа в секунду. Но я не знаю, как заменять содержимое div#real-dom
каждый раз.
function replaceWithVDOM() {
let element = (
<div>
<h2>What time is it? - With ReactJS</h2>
<h3>It is {new Date().toLocaleTimeString()}.</h3>
</div>
)
ReactDOM.render(element, document.getElementById("root"))
}
function replaceWithRDOM() {
let element = `
<div>
<h2>What time is it? - Without ReactJS</h2>
<h3>It is ${new Date().toLocaleTimeString()}.</h3>
</div>`
// Update the div#real-dom with the elemet here
}
setInterval(replaceWithVDOM, 1000);
//setInterval(replaceWithRDOM, 1000);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>
-----------------------
<div id="real-dom"></div>
Есть предложения?
ОБНОВЛЕНО:
Спасибо за помощь. Теперь я вижу разницу между ними. Я сделал это в codepen, для тех, кто хочет увидеть разницу (chrome dev tools)
Комментарии:
1. я думаю, что можно обойтись простой заменой
document.getElementById("real-dom").innerHTML =new Date().toLocaleTimeString();
Ответ №1:
document.getElementById("real-dom").innerHTML = element;
Это опасно и должно использоваться только в качестве теста, никогда ни для чего в производстве.
Однако для целей тестирования вы, вероятно, увидите более высокую производительность DOM API, если узнаете, как безопасно создавать элементы без innerHTML. Смотрите https://developer.mozilla.org/en-US/docs/Web/API/Document , в частности createElement
, createTextNode
и appendChild
.