Почему компоненты в React перезаписывают себя?

Изучаю React. Заметил, что последний children компонент перезаписывает предыдущий: в моем случае после рендеринга <Feedback /> присутствует в DOM, а <Header text="Отзывы" /> отсутствует.

Описания причины такого поведения не смог найти. Не могли бы вы подсказать, как это исправить, и где это описано.

Код:

function Header(props) {
  return (
    <header>
      <h1>{props.text}</h1>
    </header>
  );
}

function Feedback() {
  return (
    <ul></ul>
  );
}

function App() {
  return(
    <Header text="Отзывы" />,
    <Feedback />
  );
}

ReactDOM.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
  document.getElementById("root")
);

Ответы (2 шт):

Автор решения: Vasily

По правилам React Вы можете вернуть только один элемент из метода render. Заверните Ваши компоненты, например в div или воспользуйтесь React Fragment'ом что бы сохранить оригинальную верстку:

return (
    <React.Fragment>   
       <Header text="Отзывы" /> // запятая тут не нужна
       <Feedback />
    </React.Fragment> 
)

Запись:

<React.Fragment></React.Fragment>

аналогична (тоже самое что):

<></>
→ Ссылка
Автор решения: Pavel Mayorov

Потому что кроме React было бы неплохо ещё и JavaScript изучить.

Когда вы пишите конструкцию вида (a, b) - вы используете оператор "запятая", который во всех Си-подобных языках возвращает последний аргумент.

Чтобы вернуть несколько элементов - вам нужен контейнер. React в качестве контейнера предлагает использовать фрагмент: <>a b</>.

→ Ссылка