Форум программистов, компьютерный форум, киберфорум
React/ReactJS
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
3 / 3 / 0
Регистрация: 16.06.2014
Сообщений: 146
Записей в блоге: 4

Использование this внутри map при преобразовании массива

27.12.2019, 14:30. Показов 842. Ответов 1

Студворк — интернет-сервис помощи студентам
Всем привет.
Недавно начал изучать React на онлайн-курсах. И вот, задание:
"Создайте компонент Tabs, который выводил бы bootstrap-вкладки (https://getbootstrap.com/docs/... navs/#tabs) с надписями, заданными через параметр props.tabs в виде массива: <Tabs tabs={[ "Описание", "Фотографии", "Отзывы" ]} />. Для каждой ссылки <a> внутри вкладки <li> выведите атрибут data-index, хранящий ее порядковый номер. Обеспечьте переключение вкладок. При клике на любую ссылку <a> во вкладке нужно вычислить ее номер, поместить его в переменную this.state.activeIndex, и учитывать этот номер в функции render – отрисовывая соответствующую вкладку с дополнительным классом active."

Мой jsx-исходник:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Tabs extends React.Component {
  constructor(props) {
    super(props);
    this.state = {  activeIndex: 0  }
  }
 
  onLinkClick(event) {
     this.setState({ activeIndex: Number(event.currentTarget.getAttribute("data-index"))});
  }
 
  render() {
    let active_link = this.state.activeIndex;
    let on_click = this.onLinkClick.bind(this);
    let li_elements = this.props.tabs.map(function(tabs_element, index){
      let class_name = (active_link===index) ? "nav-link active" : "nav-link";
      return <li class="nav-item"><a className={class_name} data-index={index} onClick={on_click} href="#">{tabs_element}</a></li>});
    
    return <ul class="nav nav-tabs"> { li_elements } </ul>
  }
}
Вопрос такой: я сначала хотел обойтись без локальных переменных active_link и on_click внутри render(), а просто писать:
JavaScript
1
2
3
    let li_elements = this.props.tabs.map(function(tabs_element, index){
      let class_name = (this.state.activeIndex===index) ? "nav-link active" : "nav-link";
      return <li class="nav-item"><a className={class_name} data-index={index} onClick={this.onLinkClick.bind(this)} href="#">{tabs_element}</a></li>});
Но происходит какая-то ошибка. Я так подозреваю, из-за this. Помогите, пожалуйста, разобраться. Сорри, если вопрос нубский, я ещё только начинаю всё это дело.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.12.2019, 14:30
Ответы с готовыми решениями:

Использование элементов массива внутри строки
Добрый день! Есть такой код &lt;?php $config = include 'config.php'; echo $config; var_dump($config); try { $conn =...

Использование стека в преобразовании
Наткнулся на одну проблему и нуждаюсь в помощи. задание следующее. Нужно преобразовать инфиксное выражение в постфиксное, используя стек. ...

Передача массива в функцию и использование его внутри функции
Добрый день. Подскажите как реализовать следующее: Есть функция class kmvclass { public static string f_nnauth_get() { ...

1
0 / 0 / 0
Регистрация: 19.11.2016
Сообщений: 10
09.01.2020, 00:51
Если хочешь использовать реакт - то лучше наверно посмотреть в сторону es6, тем более раз let используешь. (значит с каким-то сборщиком знаком).
https://monsterlessons.com/pro... hinayushih - вроде коротко и понятно, но в принципе статей на эту тему много.
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
export default class Tabs extends React.Component {
  constructor(props) {
    super(props);
    this.state = { activeIndex: 0 }
  }
  
  onLinkClick(index) {
    // Я бы сразу номер передавал бы. 
    this.setState({ activeIndex: index });
  }
  
  render() {
    // Контекст теряется внутри функции map. Можно стрелочные функции использовать и короче станет и работать будет
    return (<ul class="nav nav-tabs">
      {this.props.tabs.map((tab, index) => {
        let class_name = (this.state.activeIndex===index) ? "nav-link active" : "nav-link";
        return (
          <li class="nav-item">
            <div className={class_name} onClick={() => this.onLinkClick(index)}>{tab}</div>
          </li>)
      })} 
    </ul>);
  }
}
Вроде должно работать.
Оу на дату не глянул)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.01.2020, 00:51
Помогаю со студенческими работами здесь

интеграция с google map пример внутри.
всем привет! нужно сделать на сайте вот такую вещь, только с другим регионом - см прикреплённый файл. у меня есть пример, который работает...

Std::map или string внутри класса?
Как эффективней хранить экземпляры класса, что бы потом находить нужный? В связки std::map или задавать отдельное поле с имением или ID...

Использование map
Как вставлять элемент в map?Пишет кучу ошибок. #include &lt;iostream&gt; #include &lt;map&gt; using namespace std; struct four { ...

Использование тега MAP
Читают ли поисковики в тег MAP (для изображения) атрибуты TITLE и ALT? Точнее, есть ли смысл их использования для SEO?

Использование команды Map
Написать программу имитирующую работу телефонной книги: пользователь может забивать новые контакты (фамилию человека и записывать этому ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru