React. Реакт. Тестовая задача 002. Текущее время





Этот код выведет текущее время.

Разберёмся, что здесь происходит:

Теперь раз в секунду будет вызываться функция timer. Её задача — рендерить DOM-дерево из нескольких узлов. Кажется, будто все элементы дерева будут отрендерены заново, раз в секунду, но это не так.

...

Вот что происходит на самом деле:

Обновляется только элемент h2, который содержит в себе new Date().toLocaleTimeString().

Остальные элементы дерева не перерисовываются.

Чтобы разобраться, почему так происходит, познакомимся с виртуальным DOM.

Виртуальный DOM

Элемент в React - это простой объект. Так выглядит дерево элементов в React:

React.createElement(
  'section',
  null,
  [
    React.createElement(
      'div',
      null,
      [
        React.createElement('h1', null, 'Заголовок'),
        React.createElement('h2', null, 'Подзаголовок'),
      ],
    ),
    React.createElement(
      'div',
      null,
      React.createElement('p', null, 'Параграф'),
    ),
  ],
);

Шпаргалка пошаговая, что и как надо делать для работы правильного кода React

Здесь имеется ввиду, что мы используем НЕ node.js, а какой-то обычный простой сервер, например, Apachе или python -m http.server 8000

1. Подключите к файлу HTML React и ReactDOM (если используете CDN)
  <script src="/js/react/react.development.js"></script>
  <script src="/js/react/react-dom.development.js"></script>

2. Деструктурируйте нужные функции
const { useState, createElement } = React;
const { createRoot } = ReactDOM;

Пояснение.

{ useState, createElement } - синтаксис деструктуризации. Он говорит:

"Возьми свойства useState и createElement из объекта справа (React) и создай локальные переменные с такими же именами".

const - объявление констант. После этого:

useState становится локальной ссылкой на React.useState;

createElement - локальной ссылкой на React.createElement.

3. Создавайте элементы правильно
  const element = React.createElement(
    'div',
    null,
    React.createElement('h1', null, 'Текущее время:'),
    React.createElement('h2', null, new Date().toLocaleTimeString()),
  );

4. Рендерите в DOM
const root = createRoot(document.getElementById('root'));
...
root.render(element);