Reactjs TypeError:books.map不是react中的函数

Reactjs TypeError:books.map不是react中的函数,reactjs,rest,jsx,Reactjs,Rest,Jsx,/*this.state包含:{loading:true,books:status:'success',data:(10)[{id:1,name:xyz,…},{}]*/ import React from 'react'; export class Books extends React.Component { state = { loading: true, books: [] } componentDidMount() { fetch('**url**')

/*this.state包含:{loading:true,books:status:'success',data:(10)[{id:1,name:xyz,…},{}]*/

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);
const b=books.data;
返回(
{b.map((k)=>(
{k.name}
))}
);
}
}

我想显示所有的值(例如:id:1,name:xyz,id:2,name:xxx) 从一个星期以来我一直在努力解决这个问题。但是不能。获取地图不是一项功能。 请帮助我解决此问题。

请尝试以下操作:

设b=books.data | |[];
由于您正在componentDidMount中获取数据,因此在您想要渲染时,很可能无法获得结果。

请尝试以下操作:

设b=books.data | |[];

由于您在componentDidMount中获取数据,因此当您想要渲染时,它很有可能不会得到结果。

处于状态的
books
对象最初是空的,因此
books.data
不存在,因此
books.data.map
不起作用。条件渲染也是如此

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

        </div >
    );

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

状态中的
books
对象最初为空,因此
books.data
不存在,因此
books.data.map
不起作用。条件渲染也是如此

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

        </div >
    );

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

尝试设置一个条件来检查b是否为数组!像这样:

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

    </div >
const b=books.data;
返回(
{
if(数组isArray(b)){
b、 地图((k)=>(
{k.name}
))
}
}
);
}

尝试设置一个条件来检查b是否为数组!像这样:

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

    </div >
const b=books.data;
返回(
{
if(数组isArray(b)){
b、 地图((k)=>(
{k.name}
))
}
}
);
}

感谢您的快速回复。天啊!它解决了我的问题。非常感谢!快乐tp帮助:)感谢您的快速响应。天啊!它解决了我的问题。非常感谢!快乐tp帮助:)谢谢你的回复。我也在尝试这个代码。但是给我一个错误:TypeError:无法读取undefinedSorry,my bad的属性'length',当书籍为空,因此没有数据要销毁:)因此更改表示,如果存在数据(可以从书籍中销毁),则根据收到的数据呈现以下内容,
books
不是数组,它是一个包含数组的对象。为了干净的代码和不误导维护,请更改状态
books:{}
谢谢您的回复。我也在尝试这个代码。但是给我一个错误:TypeError:无法读取undefinedSorry,my bad的属性'length',当书籍为空,因此没有数据要销毁:)因此更改表示,如果存在数据(可以从书籍中销毁),则根据收到的数据呈现以下内容,
books
不是数组,它是一个包含数组的对象。为了干净的代码和不误导维护,请更改状态
books:{}