javascript - 从 api 接收数据时出现“未定义”问题
问题描述
我正在改进自己的 reactjs。我正在尝试建立一个电子商务网站。我使用 Mock Api 作为服务。我可以在 ProductList.js 中列出我的数据。但我不能在 ProductDetails.js 中调用相同的数据。我收到“未定义”错误。
const ProductDetail = (props) => {
const { buttonLabel, className } = props;
const { name, description, price,id } = props;
const axios = require('axios');
const [modal, setModal] = useState(false);
const toggle = () => setModal(!modal);
const [dress, setDress] = useState([]);
useEffect(() => {
axios
.get(`https://5fd9d76f6cf2e7001737ead3.mockapi.io/api/v1/dress`)
.then(function (response) {
setDress(response.data);
})
.catch(function (error) {
console.log(error);
});
}, []);
const data = dress.map(item => {
return {
name: item.name,
description: item.description,
price:item.price,
id: item.id
}
})
return (
<div >
<ProductDetailButton onClick={toggle}>Detay{buttonLabel}</ProductDetailButton>
<Modal isOpen={modal} toggle={toggle} key={`${data.id}`} className={className}>
<ModalHeader toggle={toggle}>{`${data.name}`}</ModalHeader>
<ModalBody >
{`${data.price}`}
</ModalBody>
<ModalBody>
{`${data.description}`}
</ModalBody>
<ModalFooter>
<Button color="secondary" onClick={toggle}>
Kapat
</Button>
</ModalFooter>
</Modal>
</div>
);
模态显示为输出。它说“未定义”而不是数据。如何解决?
解决方案
您的 api 返回一个对象数组,因此如果您有 ProductList,则不应在 Product Details 中进行 api 调用。您应该将这些项目作为道具传递。
例子。
const ProductList = () => {
const [showProduct, setShowProduct] = useState(null)
..... api call and data...
return (
<React.Fragment>
{data?.map(item => <div>{item.name} <button onClick={() => setShowProduct(item)}> Show Item </button> </div> }
{ !!showProduct && <ProductDetails item={showProduct} onClose={() => setShowProduct(null) /> } //this will open up your modal
</React.Fragment>
)
}
那么在您的产品详细信息中应该是这样的。
const ProductDetails = ({ item, onClose }) => {
//your item details accessible here via props
return <Modal> <ModalBody> {item.name} </ModalBody><ModalFooter><Button onClick={onClose}>Close</ModalFooter></Modal>
}
推荐阅读
- php - 无法使用 phpmailer 在邮件中发送令牌和电子邮件值以忘记密码
- java - ObjectMapper 无法处理带有遗留枚举(类)的映射对象
- javascript - 在javascript中打印集合容器的特定元素
- highcharts - Highcharts/Highstock 跑圈
- angular - Rxjs 运算符 withLatestFrom 无法按预期工作
- gradle - 如何在 Kotlin DSL 的脚本插件中包含 Gradle 插件?
- c++ - 关于对齐存储和可简单复制/可破坏的类型
- django - 分页不适用于多个查询
- css - 使用 Bootstrap 轮播在单个轮播项目中显示多列
- android - I keep connection failed error in my "onFailure" method