javascript - React ref 在循环内重新渲染时中断
问题描述
我有一个包含一组组件的画廊组件。在每个子组件中,我都分配了一个参考。这样做的原因是因为在子组件中还有许多其他子组件,我试图访问大约 5 个组件深的组件上的一些功能。下面的代码显示了初始设置:
export class Gallery extends React.Component {
render() {
const galleryItems = data.map((item, index) => {
return (
<GalleryItem
ref={React.createRef()}
/>
);
});
return (
<div >
<Gallery
items={heroGalleryItems}
/>
</div>
);
}
}
当 Gallery 组件渲染 GalleryItem 组件数组中的所有 refs 时,都是正确的。但是一旦 Gallery 组件由于任何原因重新呈现,GalleryItem 组件中的 refs 就会变为空值。
我在子组件中尝试了几件事,但我没有解决这个问题。我相信原因是因为上面的代码中发生了一些事情。
在阅读以下内容后,我还尝试更改代码:
但是,当我查看自己的实现时,我并不清楚这个人在说什么。
解决方案
React.createRef(
您需要从循环(以及渲染)中移出),因为它在每个渲染上创建一个新的 ref。
根据您的代码/用法,您需要在构造函数和 CWRP 方法中执行此操作(基本上是在数据更改时)。
然后创建galleryItems
就像
...
<GalleryItem ref={item.ref} />
...
推荐阅读
- kubernetes - 在 Prometheus Discovery 中配置 Kafka-zookeeper 集群(使用 Strimzi Kafka 集群)
- python - 如何将一列图像 url 转换为数据框中的 numpy 数组?
- java - 在我的活动中从服务访问对象变量
- php - PHP - 无法从 foreach 循环中获取匹配值
- ruby - 传入命名参数时,Rspec测试一直失败
- python - 试图通过仅获取元组中的整数来形成一个从元组解包中获取其大小的数组
- r - 如何在 R 中编写递归 compose 函数?
- ssh - 关于使用 ssh 进行公钥和私钥签名和验证的问题
- python - 如何在 Python 中将两个关联值存储为数组
- node.js - NPM RUN deploy 给出错误消息。RoboFriends 部署脚本失败。“上面可能有额外的注销”