React.js row.map не является функцией

У меня проблема с созданием таблицы реакции, на самом деле у меня есть этот код

render() {
    var tableData = [
      {name: this.state.users}
    ];
    var tableRow = [];
     for(var x = 1; x <= this.state.users.lenght; x++) {
    tableRow.push(this.state.users[x]);
    if (x % 4 == 0) {
        tableData.push(tableRow);
        tableRow = [];
    }
}

    return (
        <Table1>
        {tableData.map((row, index) => {
            return (
                <tr key = {row + index}>
                    {row.map((cell, index) => {
                        return (
                            <td key = {"cell_" + index}>{cell}</td>
                        );
                    })}
                </tr>
            );
        })}
   </Table1>

в моем tableData у меня есть некоторые данные firebase, которые извлекаются правильно, но у меня проблема с помещением их в ячейку таблицы, на самом деле с этим кодом таблицы я получил ошибку «TypeError: row.map не является функцией» Как я могу решить эту проблему ? Спасибо :)

редактировать: добавлен console.info для tableData React.js row.map не является функцией

можно console.info(tableData) и показать нам результат?

Abslen Char 22.04.2018 10:37

добавил это в вопрос :)

jj.badweyn 22.04.2018 10:49
this.state.users.lenght -> this.state.users.length
Ben West 22.04.2018 10:52
Поведение ключевого слова "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
3
1 185
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

.map - это метод массивов, а tableData[0] - это не массив, это объект ({name: this.state.users}). Непонятно, что там творится, может, убрать? tableData[1] и далее будут массивами и должны правильно отображаться.

Что ж, думаю, я не могу его удалить :) как мне сделать tableData массивом? ;)

jj.badweyn 22.04.2018 11:09
tableData - это массив, но не первый элемент в нем. Вы выполняете tableData.map( row => row.map( ... )), что означает, что каждый row также должен быть массивом. Но первый row - это объект. Я не могу сказать, как преобразовать его в массив, потому что не знаю, для чего он нужен. Почему вы решили поместить его в массив?
Ben West 22.04.2018 11:20

Допустим, я получаю имена пользователей из базы данных firebase, я хочу поместить их все в таблицу и сделать их интерактивными для извлечения данных пользователя, по которым щелкнули мышью, я читал, что размещение данных в массиве было бы лучшим вариантом для этого :) спасибо за ваше время путь

jj.badweyn 22.04.2018 11:25

Попробуйте так: вместо var tableData = [{name: this.state.users}] просто напишите var tableData = []. Теперь он рендерится? Чего не хватает?

Ben West 22.04.2018 11:31

Он отображает имена пользователей, но только в одной ячейке, также их 4 в базе данных, в то время как приложение отображает только 3, поэтому один отсутствует

jj.badweyn 22.04.2018 11:37

Это потому, что ваш цикл начинается с 1 вместо 0.

Ben West 22.04.2018 11:40

Во-первых, tableData содержит первое значение как {name: this.state.users}, которое не является массивом, и, следовательно, row.map завершится ошибкой.

Во-вторых, в length есть опечатка

for(var x = 1; x <= this.state.users.length; x++) {

.map доступен только на массивах, и в вашем случае row не является также массивами (tableData[0] is not array).

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