Представьте ситуацию, когда вам нужно поставить фокус в инпут. Для input’а, который есть на странице в момент загрузки — никаких проблем, в документации указано как использовать ref. Остается только вызвать метод .focus()
Но если элемента на странице нет, например, по клику на «Логин» появляется модальное окно, и в нем нужно установить фокус в input…
Ситуация так же решается с помощью ref 😉
class Input extends Component { focus() { this.el.focus(); } render() { return ( <input ref={el=> { this.el = el; }} /> ); } }
Так как у стрелочных функций нет своего this, мы можем удобно присвоить в this.el (то есть Input.el в нашем случае) необходимый html-элемент. Именно html. У которого уже есть все методы, описанные в MDN. Отлично, теперь у нас есть метод, который установит фокус в инпут. Остается его откуда-то вызывать.
<code> class SignInModal extends Component { componentDidMount() { this.InputComponent.focus(); } render() { return ( <div> <label>User name: </label> <Input ref={comp => { this.InputComponent = comp; }} /> </div> ) } } </code>
При этом, как говорится в оригинале: Note that when you use ref on a component, it’s a reference to the component (not the underlying element), so you have access to its methods.
Перевод: когда вы используете ref на компонент, то этот ref ссылается на компонент, а не на «низлежащий» html-код. Поэтому можно использовать методы компонента. Что мы и сделали, используя запись: this.InputComponent.focus()