Пожалуйста, обратитесь к этому URL в React DOCS.Также доступна версия этого кода здесь .
Я понимаю, что внутри Functional React Component
предпочтительно использовать хук useCallback
для создания обратного вызова ref, как показано наРеагируйте на URL документа выше, но я хотел понять, что произойдет, если вместо этого в качестве обратного вызова ref будет использоваться простая arrow function
(встроенная функция).
Итак, ниже, я изменил код изURL выше, чтобы не использовать хук useCallback
.Вместо этого я просто использую обычный arrow function
в качестве обратного вызова.Кроме того, я добавил два оператора 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 вызывается три раза и почему компонент рендерит три раза при начальной загрузке?