2 回答
TA贡献1859条经验 获得超6个赞
对于如何ref分配,您必须记住 JSX 编译为普通的旧 JavaScript。幕后发生的事情的一个非常简单的例子如下:
function createRef(initialValue) {
return {
current: initialValue
}
}
const root = document.getElementById('root');
function render(elementType, innerText, ref) {
const el = document.createElement(elementType);
if (ref) {
ref.current = el;
}
el.innerText = innerText;
root.replaceChildren(el);
}
const ref = createRef(null);
console.log(ref);
render('div', 'Hello World', ref);
console.log(ref);
<div id="root"></div>
所以基本上 - 当您使用 时<img ref={this.imageRef} src={urls.regular} alt={description} />
, 会ref
作为属性传递,并且在呈现它的函数中,它将实际的 DOM 节点分配给ref.current
。
TA贡献2012条经验 获得超12个赞
因此,为了回答你的第一个问题,React 会将 DOM 元素分配给currentref 的属性。在您的情况下,这意味着this.imageRef.current组件渲染后它将成为对图像元素的引用。
控制台输出部分让它有点令人困惑,但这并不是由于 React 所做的一些魔法,而是由于浏览器控制台如何处理在记录对象后属性发生变化的对象。例如,如果您在控制台中运行以下代码,然后展开输出,您将看到与 ref 中看到的相同行为。
const obj = { current: null }
console.log(obj)
obj.current = 'something'
这是它的样子的屏幕截图。
添加回答
举报