@tostershmoster

Как вынести переиспользуемый блок кода?

Такой компонент
const Comp = () => (
  <div>
    <ul>
      <li>
        <h2>Cap1</h2>
        <p>Text1</p>
      </li>
      <li>
        <h2>Cap2</h2>
        <p>Text2</p>
      </li>
    </ul>
  </div>
);


Сейчас в нём 2 li но может быть и больше, нужно вынести li в переиспользуемый блок. Не понятно только как правильно это сделать. На отдельный компонент в отдельном файле это как-то не тянет. Оставить его тут же, только выше?

const LiItem = () => {
  <li>
    <h2>Cap1</h2>
    <p>Text1</p>
  </li>
}

const Comp = () => (
  <div>
    <ul>
      constants.map(item => LiItem)
    </ul>
  </div>
);
  • Вопрос задан
  • 104 просмотра
Решения вопроса 2
@chemdev
const data = [{header: "1", text: "1"}, {header: "2", text: "2"}]
const LiItem = ({header, text}) => (
  <li>
    <h2>{header}</h2>
    <p>{text}</p>
  </li>
)

const Comp = () => (
  <div>
    <ul>
      {data.map((el, idx) => <LiItem key={idx} header={el.header} text={el.text} />)}
    </ul>
  </div>
);
Ответ написан
alexey-m-ukolov
@alexey-m-ukolov Куратор тега React
"Правильного" варианта тут нет, делайте как вам удобнее.

Я бы для такой простой штуки не стал заморачиваться и сделал так (детали с пропсами опущены):
const Comp = () => (
  <div>
    <ul>
      constants.map((item) => (
        <li>
          <h2>Cap1</h2>
          <p>Text1</p>
        </li>
      ))
    </ul>
  </div>
);


P.S. Если всё же разделять, я бы тег li оставил в родительском компоненте, а в отдельный вынес только его содержимое. Таким образом жёстко связанные в семантике html теги не будут разнесены потенциально по разным файлам.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы