reactjs - 在反应中动态地将图像添加到 DOM
问题描述
我有一个更新二进制数据的套接字连接。
通过单击我想更新图像 src ,图像被创建为空白,带有空 src 和 id ,但我没有发现我该怎么做:
$('imageId').src = 'new src' like in Jquery
我有图像数组,所以我不能为每个图像this.ref
或其他东西定义
我的套接字代码://这里我要更新具体的图像
divSocket.on('data', (data) => {
var bytes = new Uint8Array(data);
this.setState({
imageSrc : someBufferFunction(bytes)
})
});
我的渲染代码
{ this.props.list.map((item,i) =>(
<div className="img">
<img id={`cam${i}`} src={`data:image/jpeg;base64,${this.state.imageSrc}`} />
</div>
))}
问题是this.state.ImageSrc
它将更新所有图像并在所有图像中显示套接字数据(视频)
我可以在循环中创建具有特定 id 的图像,但是如何通过 props/state 更新特定图像
解决方案
您正在使用数组来显示图像......来自props
......this.props.list
此列表应包含每个图像的数据......但item
参数不用于.map
渲染。
我需要做一个占位符
假设props.list
不包含任何数据...用作循环计数器...仅呈现占位符...您需要:
src
本地状态数组(this.state.sources = [];
)key
你应该使用prop渲染图像:
{ this.props.list.map((item,i) => ( <div className="img" key={`cam${i}`} > <img id={`cam${i}`} src={this.state.sources[i]} /> </div> ))}
- 您可以将占位符图像用于空的“单元格”
<img id={`cam${i}`} src={this.state.sources[i] ? this.state.sources[i] : "url_somePlaceholder.jpg"} />
来自套接字的新图像需要使用索引来更新数组元素——对于所有图像来说并不常见——this.state.sources
请参阅React:如何使用 setState 更新 state.item[1]?寻找灵感。
如果之前假设 props.list
在开始时包含图像源 - 将值复制到状态(incomponentDidMount
或)componentDidUpdate
static getDerivedStateFromProps
推荐阅读
- python - 查询错误,响应是该行存在但值为 None
- python - Django:在视图中引用模型——>局部变量可能在赋值之前被引用
- php - 如何在浏览器上显示来自 API 的原始 png 响应?
- python - 将消息对象转换为字符串(Gmail api 和 python)
- mariadb - 是否可以使用从服务器 A(我们将其视为主服务器)生成的二进制日志文件设置 MYSQL 复制到服务器 B
- java - 有没有办法在eclipse的库代码中留下笔记?
- javascript - Vue嵌套路由
- python - 有没有办法解决这个语法错误?
- asp.net-core - 包还原失败。回滚包更改 VS2019
- java - 如何从 JKS 文件中提取 PGP 公钥和 PGP 私钥并解密 pgp 加密消息?