【发布时间】:2017-04-10 01:23:41
【问题描述】:
我正在尝试使用 React JS 通过 ref 获取元素高度,但没有成功。
我有这样的事情:
render() {
let cars = carData.filterCars(this.props.carsToShow, this.props.filters);
return (
<div>
<div className="carList">
<div className="cars" ref="cars">
{cars.map((car, i) => {
let carRef = "car-" + car.id;
return (
<div ref={carRef} key={i}>
<div>
<div><img src={car.image_url} /></div>
<div className="carNameAndDesc">
<div>{car.make} {car.model}</div>
<div>{car.price}</div>
</div>
</div>
</div>
);
})}
</div>
</div>
<div ref="bigScreenDetails" className="bigScreenDetails">
<div className="carDetailsBigScreen">
<CarDetails carID={this.state.carID}/>
</div>
</div>
</div>
);
}
并且在 componentDidMount 我尝试按如下方式进行:
componentDidMount(){
let carRef = "car-" + this.props.carID; //22
let refs = this.refs[carRef].offsetHeight; //undefined
let refs1 = this.refs["cars"].offsetHeight; //900
let refs2 = this.refs["bigScreenDetails"].offsetHeight; //1400
}
我无法获得地图内 div 的引用。只有那个参考我得到未定义,对于其他参考我得到正确的值。
有什么想法吗?
console.log(carRef) 内部渲染返回
"car-20"
"car-21"
"car-22"
.......
"car-35"
console.log(carRef) 里面 componentDidMount 返回
"car-22"
但如果我在 componentDidMount 中 console.log(this.refs) 我会得到:
因此只有两个 refsed 三个。
更新
好像里面绝对没有ref
{cars.map((car, i) => {
let carRef = "car-" + car.id;
return (
<div ref={carRef} key={i}>
</div>
);
})}
这是控制台日志:
let carRef = "car-" + carID;
let refs = this.refs;
let one = ReactDOM.findDOMNode(this.refs[carRef]);
let two = this.carRefs;
console.log("All refs : " + refs);
console.log("Vikramaditya : " + one);
console.log("Tom : " + two);
在第一个 console.log 中,我应该看到所有三个 ref,但我只看到其中两个。
【问题讨论】:
-
你的 car.id 来自 db 吗?这可能意味着它是一个 int 而不是一个字符串,这意味着 this.refs[carRef] 实际上正在返回 this: 'car' 22
-
@usedToBeFat 我检查了它。它是
"car-22"。 -
在你的渲染方法中让 carRef = "car-" + car.id;你能记录下这个 carRef 并查看它返回的内容吗?
-
我更新了我的问题。
标签: javascript reactjs