我有 3 个 div,我在 ReactJS 应用程序中显示。我通过循环访问存储在状态中的类名对象来显示 div。(每个 className 都有自己的 CSS 样式,显示颜色 - hat1、hat2、hat3)。
OnClick,我想获取我单击的 3 个 div 中的任何一个的 div 坐标/位置。
我试过使用React.createRef()
and getBoundingClientRect()
。但是,无论我点击哪个 div,这两种方法都会给我相同的坐标。
看起来它正在返回<section>
标签的坐标,而不是我点击的目标 div 元素......
我究竟做错了什么?
class Cylinders extends React.Component {
constructor(props) {
super(props);
this.myRef = React.createRef();
this.state = {
divs: [
{
className: 'hat1'
},
{
className: 'hat2'
},
{
className: 'hat3'
}
]
}
}
componentDidMount = () => {
console.log('mount');
}
handleClick = (item, i) => {
console.log('item', item);
console.log('i', i);
var divCoordinates = ReactDOM.findDOMNode(this).getBoundingClientRect();
console.log(divCoordinates, 'divCoordinates');
// const node = this.myRef.current;
// console.log('node', node);
}
render() {
return (
<section>
<div className="columns is-mobile">
<div className="column">
<h1 className="title has-text-black is-size-2">Cylinders Game</h1>
<button className="has-text-black">Ball container</button>
</div>
</div>
<div className="columns is-mobile">
<div className="colum ballContainer">
<div className="ball"></div>
</div>
</div>
<div className="columns is-mobile">
{this.state.divs.map((item, i) => {
return (
<div className="column">
<div className="columns is-multiline">
<div
onClick={() => this.handleClick(item, i)}
className={item.className}
key={item.name + i}
ref={el => this.containerLine = el}
> {i}
</div>
</div>
</div>
)
})}
</div>
</section>
);
}
}
export default Cylinders;