reactjs - 如何防止函数在 render() 循环中重新渲染
问题描述
我有.map()
内部包含render()
呈现许多img
-es的代码。图像本身具有src
带有图像信息的道具 - 这是从函数中获取的。为了获取我在this.getImage(barcode)
内部使用的这些信息.map.
,不幸的是,它总是会重新渲染。没有“条形码”图像无法绘制。
我用功能和图像在里面创建了新组件.map()
,但结果是一样的。顺便说一句,我认为使用代码会更清楚:
内部渲染():
{details.map((detail, idx) => (
<tr key={idx}>
<td>{detail.code}</td>
<td>
{selectedPrintType.value === "2" && (
<Fragment>
{this.getBarcode(detail.code)}
<div>
<img
src={imgSrc}
id="myimg"
alt=""
style={{
padding: "10px",
width: OS === "Linux" ? "270px" : "auto",
}}
/>
</div>
</Fragment>
)}
</td>
))}
函数获取条形码():
getBarcode = barcode => {
let { imgSrc } = this.state;
let OS = "Win";
Axios.get("/api/barcode", { params: { barcode, OS } })
.then(res => res.data)
.then(png => {
imgSrc = "data:image/png;base64," + png.toString("base64");
this.setState({ imgSrc });
})
.catch(err => {
console.log(err);
});
};
预期的输出是每个条码只有一个渲染。
解决方案
一旦获得图像 src 即 this.setState({ imgSrc }); ,我可以看到您正在设置状态
所以你不能使用 shouldComponentUpdate(nextProps, nextState){} 来确定你的组件渲染生命周期是否应该继续?
推荐阅读
- python - AttributeError:模块“utils”没有属性“load_data”
- sql-server - 如何在数据透视 SQL Server 中订购日期
- ruby-on-rails - 针对所有用户和所有文章的未定义方法
- javascript - 承诺、.then 和消息
- angular - Angular 7填写表单输入
- django - Django REST Framework - 让 ListAPIView 的行为类似于纯 ListView
- http - 如何将带有 HTTP URL 的 iframe 嵌入到 Blogger
- ios - iOS WatchOS5 - 如何确定手机上 WatchOS 复杂功能的大小?
- mercurial - 如何通过命令行获取mercurial中两个修订版本中添加/删除文件的列表
- opengl - opengl - 即使禁用深度测试也会闪烁片段