Компонент React — есть ли лучший способ?

#javascript #reactjs

#javascript #reactjs

Вопрос:

Мой первый компонент React. Вроде бессмысленно, но это отправная точка. У меня есть страница, и я хочу отобразить все заголовки на странице. Таким образом, у меня много похожих элементов (с разными значениями для data-headertext):

 <div class="col-md-12 col-sm-12 p-0 headerText" data-headertext="Browse"></div>
  

Я создал компонент класса React таким образом:

 class Header extends React.Component {
  constructor(props) {
    super(props);
  }

  render() {
    return (
      <React.Fragment>
        <div className="row">
          <div className="col-md-6 col-sm-6"><h5 className="pl-2">{this.props.headertext}</h5></div>
          <div className="col-md-6 col-sm-6 visHiddenRight" id={this.props.headertext   "BackDiv"}><h5 className="pr-2 mouseover" onClick={() => {back(this.props.headertext);}}>Back</h5></div>
        </div>
        <hr className="hrOrange mt-2" />
      </React.Fragment>
    );
  }
}

let elems = document.getElementsByClassName("headerText");

ReactDOM.render(
  renderToElements(Header, elems, 'headertext'), document.getElementById("root")
);

function renderToElements(toRender, elements, dataset) {
  for (var i = 0; i < elements.length; i  ) {
    let passText = elements[i].dataset[dataset];
    let renderEl = React.createElement(toRender, { headertext: passText })
    ReactDOM.render(renderEl, elements[i]);
  }
}
  

Это работает отлично.
КРОМЕ.

Мне пришлось добавить фиктивный тег div, который не отображается для выполнения параметров ReactDOM.render, таким образом:

 <div id="root" style="display:none;"></div>
  

Это не кажется правильным.
Как мне с этим справиться? Поэтому мне не нужен этот скрытый тег div.
Заранее спасибо.

Ответ №1:

Я бы сделал что-то вроде:

 // Header.ts
<div>
   { props ? <Header {...data} /> : null }
</div>
  

Я бы не стал полагаться на CSS, чтобы скрыть подобный контент. Это лишает смысла использовать React. Другой идеей было бы показать счетчик, пока вы ожидаете загрузки своих параметров.

Не связано, и я могу ошибаться, поскольку я использую функциональный React вместо React на основе классов, но вам не нужно использовать React.Фрагментировать больше. Просто используйте <></> .