【发布时间】:2020-08-19 11:56:43
【问题描述】:
我想使用 axios 从我的数据库中检索一个数组并将其显示在反应组件中。我使用了带有 async/await 语法的 componentDidMount() 生命周期方法,如下所示:
state = {
products: []
}
async componentDidMount() {
const res= await axios.get(http://santacruz.clickysoft.net/api/public/home-product)
.then(res => this.setState({products: res.data.products})
.catch(err => console.log(err));
}
类组件的return语句如下:
return (
<div className="wwd animated" data-animation="bounceInLeft">
<div className="wwd-slider">
<div className="container-fluid">
<div className="row">
<div className="col-md-12 nlrp">
<div className="owl-carousel owl-theme">
{
this.state.product.map( product =>
<div className="item">
<img src="images/p-01.png" className="img-fluid" />
<div className="wwd-over">
<a href="#">{product.product_name}</a>
<p>{product.info}</p>
</div>
</div>
)}
}
</div>
</div>
</div>
</div>
</div>
</div>
);
当我运行它时,它工作正常,状态已更新,我可以看到其中的所有产品,但似乎因为每次状态更新时,组件都会重新呈现自己,并且我在网页上的元素对齐完全不安。
我希望请求等到从 db 中获取所有元素,然后仅将其映射到状态一次。有人可以告诉我如何实现这一目标吗?
当我在 state 中对数组的所有 14 项进行硬编码时,我可以得到所需的对齐轮播视图,如下所示:
但是当我在同一个 map 函数中使用 axios 从后端获取数据时,一切都会受到干扰。
谁能告诉我为什么会这样?
【问题讨论】:
-
嗨,Emma,你能把它放在Codesandbox 或 Github 上,我们可以看到实际代码吗?
-
硬编码结果时,是否使用了相同的json数据,是否在
componentDidMount中使用this.setState设置状态? -
是的,同样的 JSON 数据,我使用 postman 运行 api,然后将数组结果从那里直接粘贴到元素的状态中。所以当时我不需要 setState
-
好的,我想我现在明白问题所在了。我更新了我的答案。
-
如果您仍然使用
setState,您可能已经注意到同样的问题:)。在调试时一次只更改一件事会有所帮助,但我可能会做同样的事情:D。
标签: javascript reactjs