В предыдущей статье я рассказал о том, как вызвать функцию дочернего компонента из родительского компонента. В этой статье мы рассмотрим, как сфокусировать вход, находящийся в дочернем компоненте, при нажатии на кнопку в родительском компоненте.
Настройка проекта
Создайте проект react, выполнив следующую команду:
npx create-react-app react-focus-child
Обновите index.css
следующими стилями:
body {
margin: 1rem auto;
display: flex;
justify-content: center;
max-width: 800px;
}
.App {
display: flex;
flex-direction: column;
justify-content: center;
}
button {
margin-bottom: 1rem;
}
Создание дочернего компонента
Теперь создайте дочерний компонент с полем ввода:
import React from "react"
const ChildComp = () => {
return (
<div>
<input />
</div>
)
}
export default ChildComp
Создание ссылки и передача ее дочернему компоненту
Мы будем использовать хук useRef для ссылки на дочернее поле ввода.
Поэтому давайте создадим ссылку в родительском компоненте:
import { useRef } from "react"
import ChildComp from "./ChildComp"
function App() {
const childInputRef = useRef(null)
return (
<div className="App">
<ChildComp childInputRef={childInputRef} />
</div>
)
}
export default App
В дочернем компоненте нам нужно получить переданный реквизит и установить его на элемент ввода:
import React from "react"
const ChildComp = ({ childInputRef }) => {
return (
<div>
<input ref={childInputRef} />
</div>
)
}
export default ChildComp
Фокусировка ввода дочернего компонента
Теперь в родительском компоненте создадим кнопку, добавим обработчик onClick
и сфокусируем вход:
import { useRef } from "react"
import ChildComp from "./ChildComp"
function App() {
const childInputRef = useRef(null)
const focusChild = () => {
childInputRef.current && childInputRef.current.focus()
}
return (
<div className="App">
<button onClick={focusChild}>Focus child</button>
<ChildComp childInputRef={childInputRef} />
</div>
)
}
export default App
Теперь, если вы протестируете приложение, вы сможете увидеть, что вход фокусируется при нажатии на кнопку в родительском компоненте.
Исходный код и демонстрация
Вы можете скачать исходный код здесь и просмотреть демонстрацию здесь.