событие DOM ready в React
у меня есть некоторые компоненты, как показано ниже:
Wrapper: оберните загрузчик и страницу
Loader: некоторые анимации
страницы: контент страницы
такой код:
<body>
<div id="app"></div>
</body>
class Loader extends Component {}
class Page extends Component {}
class Wrapper extends Component {
render() {
return (
<Loader/>
<Page />
);
}
}
ReactDOM.render(<Wrapper />, document.getElementById('app'));
Я хочу скрыть загрузчик и показать компонент страницы после того, как DOM будет загружен.
Как написать событие DOM ready в реагировать?
как jQuery: $(window).on('ready')
1 ответов
TL; DR если я правильно понимаю, ответ, вероятно, "невозможно". Но есть и другое решение...
вот что я думаю, что вы пытаетесь сделать, описано как серия шагов:
страница начинает загрузку,
<Loader />
компонент показывает анимацию "загрузка страницы"страница закончит загружаться,
<Loader />
компонент удален (или скрыт) и<Page />
компонент вставляется (или отображается) с помощью "реальный" контент страницы.
вот проблема: помните, что вы вводите свои компоненты React на страницу следующим образом:
ReactDOM.render(<Wrapper />, document.getElementById('app'));
вы не можете фактически ввести компонент React до загрузки DOM. Так что к тому времени, либо <Loader />
появляется примерно за 2 миллисекунды и исчезает или вообще не появляется (так как DOM уже загружен к тому времени, когда он вводится на страницу).
если вы пытаетесь показать пульсацию или другая простая анимация (например, анимированный GIF), я бы попробовал гибридный подход:
настройте свой HTML следующим образом:
<body>
<div id="app"><img src="throbber.gif" /></div>
</body>
в теге скрипта включите обработчик событий jQuery "document ready" для загрузки компонента React:
class Page extends Component {}
class Wrapper extends Component {
render() {
return (
<Page />
);
}
}
$(document).ready(function () {
ReactDOM.render(<Wrapper />, document.getElementById('app'));
});
обратите внимание, что я убрал <Loader />
- изображение throbber выполняет работу погрузчика.
идея здесь в том, что пока страница загружается, GIF throbber будет пульсировать, пока DOM не будет загружено, в этот момент событие jQuery document ready запустит & содержимое div#app
будет заменен.
Я не пробовал это, но это должны работа, при условии, что реагировать на самом деле заменяет содержание div#app
, а не просто добавление к нему. Если это не так, то это простой вопрос изменения обработчика готовности документа на что-то вроде этого:
$(document).ready(function () {
$('div#app img').remove();
ReactDOM.render(<Wrapper />, document.getElementById('app'));
});