javascript - TypeError: this.state.tickets.map 不是一个函数 (React)
问题描述
我正在尝试从 api 显示一些门票信息,但由于某种原因,映射不起作用
class Tickets extends React.Component {
state = {
tickets: [],
clicked: false,
};
onclicked = () => {
this.setState({ clicked: true });
console.log('helloitsme');
};
componentDidMount = async () => {
try {
const res = await getAllTickets();
this.setState({ tickets: res });
} catch (err) {}
};
render() {
return (
<article>
<section className="container">
{this.state.tickets.map((ticket) => (
<div onClick={this.onclicked} key={ticket._id}>
{this.state.clicked === true && (
<div className="boxinfo">
<h1 className="info">{ticket.date}</h1>
<h2 className="info">{ticket.place}</h2>
<h3 className="info">{ticket.price}</h3>
</div>
)}
</div>
))}
</section>
</article>
);
}
}
export default Tickets;
我用谷歌搜索并尝试更改状态数组,但没有任何效果。我应该获取 api 吗?
解决方案
仅当响应包含一些数据时才添加到状态。还要检查您来自 getAllTickets 的响应是否返回一个数组。如果响应不是数组,那么您很可能会收到此类错误。如果响应是数组,则下面的方法有效,并且在响应包含一些数据之前它不会设置状态。
class Tickets extends React.Component {
state = {
tickets: [],
clicked: false,
};
onclicked = () => {
this.setState({ clicked: true });
console.log('helloitsme');
};
componentDidMount = async () => {
try {
const res = await getAllTickets();
if (res) {
this.setState({ tickets: res });
}
} catch (err) {}
};
render() {
return (
<article>
<section className="container">
{this.state.tickets.map((ticket) => (
<div onClick={this.onclicked} key={ticket._id}>
{this.state.clicked === true && (
<div className="boxinfo">
<h1 className="info">{ticket.date}</h1>
<h2 className="info">{ticket.place}</h2>
<h3 className="info">{ticket.price}</h3>
</div>
)}
</div>
))}
</section>
</article>
);
}
}
export default Tickets;
还要检查您的响应是否包含其他一些数组数据。在这种情况下,如果您将 res.data 作为数组获取,则以下代码适用于您。
class Tickets extends React.Component {
state = {
tickets: [],
clicked: false,
};
onclicked = () => {
this.setState({ clicked: true });
console.log('helloitsme');
};
componentDidMount = async () => {
try {
const { data } = await getAllTickets();
if (data) {
this.setState({ tickets: data });
}
} catch (err) {}
};
render() {
return (
<article>
<section className="container">
{this.state.tickets.map((ticket) => (
<div onClick={this.onclicked} key={ticket._id}>
{this.state.clicked === true && (
<div className="boxinfo">
<h1 className="info">{ticket.date}</h1>
<h2 className="info">{ticket.place}</h2>
<h3 className="info">{ticket.price}</h3>
</div>
)}
</div>
))}
</section>
</article>
);
}
}
export default Tickets;
推荐阅读
- javascript - 如何解决写作方向?
- c++ - Windows API 子类化 - Win Docs 示例不起作用
- sql - 从Oracle SQL中的列中的字符串中提取年份
- qemu - 如何在 QEMU(raspi2) 上运行 u-boot?
- java - Android java代码在edittext旁边添加+和-按钮
- javascript - 就唯一对象标识符而言,Symbol 的目的是什么?
- javascript - 在高级自定义字段中继器中添加灯箱
- string - Error::description 被软弃用是否意味着我必须重新编写当前的错误消息系统?
- r - R中数据框中的相等行对
- object - 为什么我们不能在 Kotlin 的 Singleton 类(对象)中使用受保护的访问修饰符