Почему это дает мне «this.state.UserData.map», это не функция?

Я получаю сообщение об ошибке в своем коде «this.state.UserData.map» не является функцией. я хочу получить список из базы данных, используя выборку. я думаю, что я что-то забыл. пожалуйста, помогите мне удалить эту ошибку. заранее спасибо. Вот мой полный код для отображения списка...

import React from 'react';
import ReactDOM from 'react-dom';
export default class FetchedData extends React.Component{
  constructor(props){
    super(props);
    this.state = { UserData:[] };
    this.headers=[
      {key:1,label:'Name'},
      {key:2,label:'Department'},
      {key:3,label:'Marks'},
    ];
  }

  componentDidMount(){
    fetch("https://www.veomit.com/test/zend/api/fetch.php")
    .then(response => {
                return response.json();
            })
    .then(result => {
                this.setState({
                    UserData:result
                })
        .catch(error => {
        console.info(
          "An error occurred while trying to fetch data from Foursquare: " +error
        );
      });
    });
  }
  render(){
    return(
      <div>
      <table className = "table table-bordered">
          <thead>
            <tr>
              {
                        this.headers.map(function(h) {
                            return (
                                <th key = {h.key}>{h.label}</th>
                            );
                        })
                        }
            </tr>
          </thead>
          <tbody>
              {
                        this.state.UserData.map(function(item){             
                        return (
                                <tr>
                                  <td>{item.name}</td>
                                  <td>{item.department}</td>
                                  <td>{item.marks}</td>
                                </tr>
                            );
                        })
                    }
          </tbody>
      </table>
      </div>
    );
  }
}
````````

Внутри .then(result => {...}) делайте console.info(result). Что это такое?

Jack Bashford 29.05.2019 07:54

Это означает, что this.state.UserData не является массивом. Глядя на URL-адрес, это Объект.

Chris G 29.05.2019 07:55

можешь просто показать, что такое console.info(result)? Вероятная причина - Ваш результат не Array,

Code Maniac 29.05.2019 07:55

да, вы правы, это не массив. Я получаю объект в консоли.

Dev5 29.05.2019 09:35

ваш код дает мне ошибку «Не удается прочитать имя свойства» с нулевым значением.

Dev5 29.05.2019 09:45
Поведение ключевого слова "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
5
156
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Пожалуйста, замените свой код, я надеюсь, что он работает для вас.

Спасибо

 import React from 'react';
    import ReactDOM from 'react-dom';
    export default class FetchedData extends React.Component{
      constructor(props){
        super(props);
        this.state = { UserData:[] };
        this.headers=[
          {key:1,label:'Name'},
          {key:2,label:'Department'},
          {key:3,label:'Marks'},
        ];
      }

       componentWillMount() {
            fetch("https://www.veomit.com/test/zend/api/fetch.php")
            .then(response => {
                 return response.json();
            })
            .then(result => {
                this.setState({
                    UserData: result
                });
             })
             .catch(function(error) {
                    console.info(
                    "An error occurred while trying to fetch data from Foursquare: " +
                          error
                    );
            });
        }
      render(){
        return(
          <div>
          <table className = "table table-bordered">
              <thead>
                <tr>
                  {
                            this.headers.map(function(h) {
                                return (
                                    <th key = {h.key}>{h.label}</th>
                                );
                            })
                            }
                </tr>
              </thead>
              <tbody>
                  { this.state.UserData.length > 0 ?
                         this.state.UserData.map((item,index) => (
                             <tr key = {index}>
                                      <td>{item.name}</td>
                                      <td>{item.department}</td>
                                      <td>{item.marks}</td>
                                    </tr>
                          ))
                          ) : (
                               <tr>
                                  <td colspan = "3">No record found.</td>
                                </tr>
                              )}
                  </tbody>
          </table>
          </div>
        );
      }
    }
    ````````

он дал this.state.UserData.length > 0?

Phani 29.05.2019 08:09

@JackBashford Пожалуйста, проверьте свою функцию .map. а также вам нужно проверить длину ваших данных.

Sanat Gupta 29.05.2019 08:09

Но это объект, а не массив - см. мой ответ. У объектов нет length.

Jack Bashford 29.05.2019 08:12

В этом выражении .then(result => { this.setState({ UserData:result }) ваш результат должен возвращать массив объектов, потому что вы объявили UserData как массив. Если this.state.UserData не является массивом, то как вы сопоставляете это.

Sanat Gupta 29.05.2019 08:20

@SanatGupta, не могли бы вы проверить и отредактировать this.state.UserData.map((item,index) => ( <tr> <td>{item.name}</td> <td>{item.department}</ td> <td>{item.marks}</td> </tr> )): ( <tr> <td>Запись не найдена.</td> </tr> )}

Phani 29.05.2019 08:21

Код @Techiepop обновлен, пожалуйста, проверьте. то, что ты хочешь.? Вы получаете какую-либо ошибку, пожалуйста, дайте мне знать.

Sanat Gupta 29.05.2019 08:30

@SanatGupta stackblitz.com/edit/react-ehwxdk, пожалуйста, проверьте это на наличие проблемы рядом с:

Phani 29.05.2019 08:56

ваш код дает мне ошибку «Не удается прочитать имя свойства» с нулевым значением.

Dev5 29.05.2019 09:46

Пожалуйста, попробуйте еще раз, на самом деле ошибка внутри функции componentWillMount(), теперь снова обновите код, пожалуйста, проверьте.

Sanat Gupta 29.05.2019 10:22

Данные являются объектом — вам нужно преобразовать их в массив с помощью Object.values:

UserData: Object.values(result)

теперь он дает мне «Невозможно прочитать имя свойства» нулевой ошибки»

Dev5 29.05.2019 09:40

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

ответ должен нравится это. Вы можете указать серверным службам измениться таким образом или преобразовать это в свое состояние.

[{name: 'John Doe', department: 'CEO', marks: 'title' } , {....} ]

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