javascript - 在 React 中测量一系列 DOM 元素的绝对位置
问题描述
沙盒:https ://codesandbox.io/s/8292lmypz2
我正在尝试测量 some div
s 的绝对位置。我div
通过转发ref
( React.forwardRef()
) 访问我感兴趣的 div 的 DOM 节点。在我的父组件的构造函数中,我用React.createRef()
s 填充一个数组,然后我将它分配给每个 div 迭代引用为他们正在被渲染。最后,我记录每个 div 的返回值getBoundingClientRect()
。问题是——尽管每个 div 相对于下一个 div 具有唯一的位置——但每次都返回相同的数据。就好像我正在getBoundingClientRect()
为同一个 div 获取数据八次。是什么赋予了?
解决方案
在您的情况下,一个非常基本的问题是,为了创建 refs 数组,您正在使用Array.fill
方法,该方法使用 的相同引用初始化数组中的所有值React.createRef
,因此当您尝试assign refs
使用 div 时,所有 ref 属性将引用分配给 ref 实例的最后一个 div
解决此问题的一种简单方法是使用 Map 而不是 fill like
constructor(props) {
super(props);
this.refArray = Array.apply(null, { length: props.number.length}).map(() => React.createRef());
}
推荐阅读
- react-native - EXPO : 分享音频文件
- javascript - $fireDb 在 Nuxt Fire / Firebase Vuex 中未定义
- reactjs - 使用 React Hooks 切换对象中一项的值
- c - 如何在不使用 iwconfig 的情况下在 ADB shell 中获得网络速度
- typoscript - 如何自定义 TYPO3 styles.content.get 模板
- r - 通过更改循环中的条件来创建多个二分变量
- r - 根据由第三列分组的第二列中的值将值分配给新列?
- cucumber - 在 Cucumber 中使用不同的数据多次运行相同的步骤
- vb.net - 哪些字符必须为 URI 进行百分比编码?
- react-native - axios 或 fetch 给任何 HTTP 调用提供网络错误