Библиотека react-bootstrap-tabs, ошибка компиляции

возникают проблемы с библиотекой https://github.com/freeranger/react-bootstrap-tabs, используемой для создания вкладок в React

Мой код, который работает:

<Tabs onSelect = {(index, label) => console.info(label + ' selected')}>
                            <Tab label = "TEST">
                                <div className = "table-scrollable table-scrollable-borderless">
                                    <table className = "table table-hover table-light">
                                        <thead>
                                            <tr className = "uppercase">
                                                <th> # </th>
                                                <th> First Name </th>
                                            </tr>
                                        </thead>
                                        <tbody>
                                            <tr>
                                                <td> 1 </td>
                                                <td> Mark </td>
                                            </tr>
                                        </tbody>
                                    </table>
                                </div>
                            </Tab>
                            <Tab label = "TEST2">
                                <div className = "table-scrollable table-scrollable-borderless">
                                    <table className = "table table-hover table-light">
                                        <thead>
                                            <tr className = "uppercase">
                                                <th> # </th>
                                                <th> First Name </th>
                                            </tr>
                                        </thead>
                                        <tbody>
                                            <tr>
                                                <td> 1 </td>
                                                <td> Mark </td>
                                            </tr>
                                        </tbody>
                                    </table>
                                </div>
                            </Tab>
                    </Tabs>

Но если я перейду на

<Tabs onSelect = {(index, label) => console.info(label + ' selected')}>
                            {this.state.users.map(user=>
                                <Tab label = {user} >
                                    <div className = "table-scrollable table-scrollable-borderless">
                                        <table className = "table table-hover table-light">
                                            <thead>
                                                <tr className = "uppercase">
                                                    <th> # </th>
                                                    <th> First Name </th>
                                                </tr>
                                            </thead>
                                            <tbody>
                                                <tr>
                                                    <td> 1 </td>
                                                    <td> Mark </td>
                                                </tr>
                                            </tbody>
                                        </table>
                                    </div>
                                </Tab>
                            )}
                        </Tabs>

Это дает мне ошибку

TypeError: Cannot read property 'props' of undefined TabsComponent._renderContent C:/Users/repos/node_modules/react-bootstrap-tabs/dist/index.js:198

Поведение ключевого слова "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) для оценки ваших знаний,...
0
0
121
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

У вас есть данные в вашем users состоянии? Глядя на код библиотеки на строку ошибки:

var contentClassNames = (0, _classnames2.default)('tab-content', this.props.contentClass, contentTab.props.className);

Я думаю, что он пытается найти вкладку внутри компонента Tabs. Если ваше состояние users пусто, ваша карта приведет к пустому массиву.

Попробуйте добавить вкладку по умолчанию помимо this.users.map, или, если не вкладку, то хотя бы фиктивный элемент, такой как <div/>, который вы можете скрыть с помощью css или, возможно, <React.Fragment/>.

Спасибо за ответ. Пользователи не пусты, это просто Array(2) 0: "Джон" 1: "Майк"

George Tagirov 17.03.2019 06:33

Я думаю, что ваш массив пользователей изначально пуст ([]). Это приводит к ошибке компонента вкладок:

https://codesandbox.io/s/wyj88jky2k

Вы должны убедиться, что this.state.users имеет записи, прежде чем пытаться отображать свои вкладки.

Честно говоря, я ожидал, что библиотека вкладок сможет обрабатывать пустой массив вкладок — возможно, вы могли бы вызвать ошибку на их странице github.

Спасибо за ваш ответ. Массив моих пользователей изначально не пуст.

George Tagirov 17.03.2019 06:25

Чувак, когда я очищаю массив, ты получаешь точно такое же сообщение об ошибке. В какой-то момент он должен быть пуст. Вы вышли из массива перед его рендерингом?

jsdeveloper 17.03.2019 09:09
Ответ принят как подходящий

12 часов в коде имеет смысл.

Я меняю только Вкладка, но мне нужно перерисовать весь элемент, начиная с Вкладки после загрузки страницы

{!this.state.loading ? <UsersTabs users = {this.state.users} /> : "Loading"}

С участием

class UsersTabs extends Component {
    render() {
        return (
            <Tabs onSelect = {(index, label) => console.info(label + ' selected')}>
                {this.props.users.map(market =>
                    <Tab label = {user} >
                        ...
                    </Tab>
                )}
            </Tabs>
        );
    }
}

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