Пытаюсь использовать React.createRef(), но получаю ошибку: TypeError: Не удается прочитать свойство 'focus' из null

Код в файле такой:

import React, { Component } from 'react'

class LoginModal extends Component {

    constructor(props) {
        super(props)
        this.mobileInput = React.createRef();    // <------------CREATED REF Here
    }

   componentDidMount() {
        this.mobileInput.current.focus()        // <<<------------Getting ERROR here
   }

render() {
        return (
          <input
            type='number'
            onChange={this.handleInputChange('mobile')}
            className='form-control'
            placeholder='Enter mobile'
            name='mobile'
            ref={this.mobileInput}           // <<<------------added ref to input
         />
       )
    }

Ошибка, которую я получаю:

TypeError: невозможно прочитать свойство «фокус» null

что я пробовал:

  • Я попытался использовать поддержку автофокуса, которая, похоже, не работает в моей текущей настройке проекта.
  • Пытался использовать componentDidUpdate вместо componentDidMount.

* В файле больше кода. Я удалил ненужный код для ясности.


person Vikrant Bhat    schedule 30.03.2020    source источник
comment
Ваш код работает нормально, можете ли вы опубликовать полный код?   -  person Chris G    schedule 30.03.2020
comment
@ChrisG Почему вы сказали это без каких-либо доказательств того, что это работает?   -  person Anurag Srivastava    schedule 30.03.2020
comment
Отвечает ли это на ваш вопрос? Установить фокус на ввод после рендеринга   -  person Anurag Srivastava    schedule 30.03.2020
comment
@AnuragSrivastava Вы имеете в виду такие доказательства, как codesandbox, которые я установил перед публикацией своего комментария? ????   -  person Chris G    schedule 30.03.2020
comment
@ChrisG Да, именно :)   -  person Anurag Srivastava    schedule 30.03.2020
comment
Вот полный код файлов @ChrisG pastebin.com/aj1MciHJ   -  person Vikrant Bhat    schedule 30.03.2020
comment
Нет, эта ссылка не помогает @AnuragSrivastava, я пробовал, все равно нет прогресса   -  person Vikrant Bhat    schedule 30.03.2020
comment
Я обновил песочницу, код работает как положено (обновил браузер кодов и ящика). Я подозреваю, что ошибка возникает из-за того, что ввод не всегда отображается, поэтому решение состоит в том, чтобы проверить, является ли .current !== null, прежде чем вызывать для него focus().   -  person Chris G    schedule 30.03.2020


Ответы (1)


Я нашел ответ. Просто нужно использовать это.

<input ref={input => input && input.focus()}/>
person Vikrant Bhat    schedule 30.03.2020