useRef和createRef有什么区别?
我偶然发现钩子文档useRef
。
看他们的例子…
function TextInputWithFocusButton() { const inputEl = useRef(null);
const onButtonClick = () => {
// `current` points to the mounted text input element
inputEl.current.focus();
};
return (
<>
<input ref={inputEl} type="text" />
<button onClick={onButtonClick}>Focus the input</button>
</>
);
}
…似乎useRef
可以替换为createRef
。
function TextInputWithFocusButton() { const inputRef = createRef(); // what's the diff?
const onButtonClick = () => {
// `current` points to the mounted text input element
inputRef.current.focus();
};
return (
<>
<input ref={inputRef} type="text" />
<button onClick={onButtonClick}>Focus the input</button>
</>
);
}
为什么我需要钩住裁判?为什么useRef
存在?
回答:
不同之处在于,createRef
它将始终创建一个新的引用。在基于类的组件中,通常会在构造期间将ref放入实例属性(例如this.input =
createRef())。您在功能组件中没有此选项。useRef
负责每次都返回与初始渲染相同的ref。
这是一个示例应用程序,演示了这两个功能的行为差异:
import React, { useRef, createRef, useState } from "react";import ReactDOM from "react-dom";
function App() {
const [renderIndex, setRenderIndex] = useState(1);
const refFromUseRef = useRef();
const refFromCreateRef = createRef();
if (!refFromUseRef.current) {
refFromUseRef.current = renderIndex;
}
if (!refFromCreateRef.current) {
refFromCreateRef.current = renderIndex;
}
return (
<div className="App">
Current render index: {renderIndex}
<br />
First render index remembered within refFromUseRef.current:
{refFromUseRef.current}
<br />
First render index unsuccessfully remembered within
refFromCreateRef.current:
{refFromCreateRef.current}
<br />
<button onClick={() => setRenderIndex(prev => prev + 1)}>
Cause re-render
</button>
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
以上是 useRef和createRef有什么区别? 的全部内容, 来源链接: utcz.com/qa/432474.html