У меня очень простое приложение с компонентом, который оборачивает двух детей. Он также содержит кнопку, которая вызывает повторный рендеринг.
const Hello = () => <span id="hello">hello</span>;
const World = () => <span id="world">world</span>;
class HelloWorld extends React.Component {
render() {
return (
<div id="hello-world">
<Hello />
<World />
<button onClick={() => this.forceUpdate()}>re-render</button>
</div>
)
}
}
Используя следующий код, я могу изменить DOM так, чтобы Hello
следовал за World
var hello = document.getElementById('hello-world').children[0]
var world = document.getElementById('hello-world').children[1]
hello.parentNode.insertBefore(world, hello)
Когда я запускаю повторный рендеринг, я ожидаю, что React отобразит в DOM то, что он представил в своем виртуальном DOM (Hello World
). Вместо этого он продолжает отображать World Hello
. Почему это? В каких случаях ручные обновления DOM, такие как это, вызывают проблемы?