Отображение нескольких элементов на основе числа, а не сопоставления через массив

Я знаком с отображением и массивом, чтобы отображать что-то для каждого числа в массиве. Но каков эффективный способ добиться того же с помощью числа?

Я оказался в ситуации, когда у меня есть integer, представляющий количество страниц, и компонент <Page>, который принимает опору pageNumber.

У меня есть следующая функция рендеринга:

renderPages() {
  for (let i = 1; i < this.state.numPages; i++) {
    return <Page pageNumber = {1} />;
  }
}

Функция renderPages реализована в моей функции класса render следующим образом:

render() {
  return (
    <div>
      {this.renderPages()}
    </div>
  );
}

Я понимаю, что при первом возврате renderPages закрывается. Таким образом, в итоге отображается только первая страница. Как я могу отобразить здесь больше страниц?

Ах да, хороший подход. Я думал об этом, я не был уверен, будет ли это лучшим решением :)

Barry Michael Doyle 18.10.2018 10:54
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
391
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Добавить в массив, а затем вернуть массив.

renderPages() {
    const arr = []
  for (let i = 1; i <-this.state.numPages; i++) {
    arr.push(<Page pageNumber = {1} />)
  }
    return arr
}

или вы можете сделать это без использования функции, создав пустой массив,

render() {
  return (
    <div>
      {(new Array(this.state.numPages)).map((item, i)=><Page pageNumber = {i} />)}
    </div>
  );
}
renderPages() {
    const arr = []
  for (let i = 1; i <-this.state.numPages; i++) {
    arr.push(<Page pageNumber = {1} />)
  }
    return arr
}

render() {
  return (
    <div>
      {this.renderPages().map((item)=>(item))}
    </div>
  );
}

Было бы неплохо объяснить, что делает этот код. Хотя код полезно иметь, OP (и все остальные) выиграют от объяснения.

JustCarty 18.10.2018 11:53
Ответ принят как подходящий

Еще одно предпочтение (более короткая версия):

https://stackoverflow.com/a/51335795/9206753 (мой предыдущий ответ)

Чтобы выполнить цикл несколько раз и вернуться, вы можете добиться этого с помощью from и map:

  <div>
    {Array.from(Array(this.state.numPages)).map((item, index) =>
      <Page key = {index} pageNumber = {index + 1} />
    )}
  </div>

Надеюсь, это поможет

Спасибо, собираюсь настроить ваш ответ, чтобы он лучше соответствовал моей проблеме, но это сработало для меня более надежно, чем другие опубликованные решения!

Barry Michael Doyle 18.10.2018 11:17

@BarryMichaelDoyle рад, что это помогло!

Jee Mok 19.10.2018 02:01

Другие вопросы по теме