[英]How to set focus on custom input in ReactJS using useRef and react hooks?
[英]React: set focus on componentDidMount, how to do it with hooks?
您可以使用useRef
鈎子創建一個ref,然后將它集中在一個useEffect
鈎子中,並將一個空數組作為第二個參數,以確保它只在初始渲染后運行。
const { useRef, useEffect } = React; function Foo() { const txt1 = useRef(null); useEffect(() => { txt1.current.focus(); }, []); return <input type="text" ref={txt1} />; } ReactDOM.render(<Foo />, document.getElementById("root"));
<script src="https://unpkg.com/react@16.7.0-alpha.0/umd/react.production.min.js"></script> <script src="https://unpkg.com/react-dom@16.7.0-alpha.0/umd/react-dom.production.min.js"></script> <div id="root"></div>
根據官方文檔: https : useRef
你可以使用useRef
。
useRef
返回一個可變的 ref 對象,其.current
屬性被初始化為傳遞的參數( initialValue
)。 返回的對象將在組件的整個生命周期內持續存在。
一個常見的用例是命令式訪問孩子:
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
就像一個“盒子”,可以在其.current
屬性中保存可變值。
您可能熟悉 refs 主要是作為訪問 DOM 的一種方式。 如果您使用<div ref={myRef} />
將 ref 對象傳遞給 React,則每當該節點發生更改時,React 都會將其.current
屬性設置為相應的 DOM 節點。
但是, useRef()
不僅對ref
屬性有用。 保持任何可變值類似於在類中使用實例字段的方式,這很方便。
這是有效的,因為useRef()
創建了一個普通的 JavaScript 對象。 useRef()
和自己創建一個{current: ...}
對象之間的唯一區別是 useRef 將在每次渲染時為您提供相同的 ref 對象。
請記住, useRef 不會在其內容更改時通知您。 改變.current
屬性不會導致重新渲染。 如果您想在 React 將 ref 附加或分離到 DOM 節點時運行一些代碼,您可能需要改用回調 ref。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.