TypeError: books.map не является функцией в реакции - PullRequest
0 голосов
/ 09 марта 2020
import React from 'react';

export class Books extends React.Component {
state = {
    loading: true,
    books: []
}

componentDidMount() {

    fetch('**url**')
        .then(res => res.json())
        .then((data) => {
            this.setState({ books: data })
        })
        .catch(console.log)
  }
 render() {

    const { books } = this.state;
    console.log("this.state contains:", this.state);

/ * this.state содержит: {loading: true, books: status: 'success', data: (10) [{id: 1, name: xyz, ..}, {} ..] * /

    const b = books.data;
    return (
        <div>
            {b.map((k) => (
                <h1>{k.name}</h1>
            ))}

        </div >
    );

}

}

Я хочу отобразить все значения (например: id: 1, name: xyz, id: 2, name: xxx) С 1 недели я ' Я пытаюсь это исправить. Но не смог. Получение карты не является функцией. Пожалуйста, помогите мне решить эту проблему.

Ответы [ 3 ]

2 голосов
/ 09 марта 2020

попробуйте следующее:

let b = books.data || [];

, так как вы получаете данные в componentDidMount, есть большая вероятность, что он не получит результат, когда вы хотите отрендерить.

0 голосов
/ 09 марта 2020

Попробуйте создать условие, чтобы проверить, является ли b массивом или нет! как это:

const b = books.data;
return (
    <div>
        {
         if(Array.isArray(b)){
        b.map((k) => (
            <h1>{k.name}</h1>
        ))
           }
            }

    </div >
);

}
0 голосов
/ 09 марта 2020

Объект books в состоянии изначально пуст, поэтому books.data не существует и, следовательно, books.data.map не является функцией. Как и условный рендер

    const {data} = this.state.books
    <div>
        {data && data.map((k) => (<h1>{k.name}</h1>))}

    </div >
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...