请参考React DOCS 中的这个URL。此代码的一个版本也可在此处获得。
我知道在 a 内部Functional React Component
,最好使用useCallback
钩子来创建 ref 回调,如上面的 React Docs URL 所示,但我想了解如果使用简单的arrow function
(内联函数)作为 ref会发生什么打回来。
因此,在下面,我修改了上面 URL 中的代码以不使用useCallback
钩子。相反,我只是使用常规arrow function
作为 ref 回调。此外,我添加了两个 console.log 语句。这是此URL 上也提供的代码。
import React, { useState } from "react";
import ReactDOM from "react-dom";
import "./styles.css";
function App() {
const [height, setHeight] = useState(0);
const measuredRef = node => {
console.log("Setting height. node = ", node);
if (node !== null) {
setHeight(node.getBoundingClientRect().height);
}
};
console.log("Rendering.");
return (
<div className="App">
<h1 ref={measuredRef}>Hello, world</h1>
<h2>The above header is {Math.round(height)}px tall</h2>
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
加载此应用程序时,将打印以下内容(添加编号):
1. Rendering.
2. Setting height. node = <h1>Hello, world</h1>
3. Rendering.
4. Setting height. node = null
5. Setting height. node = <h1>Hello, world</h1>
6. Rendering.
为什么 ref 回调被调用了 3 次,为什么组件在初始加载时会渲染 3 次?