2016-12-07 2 views
1

Я имею эту простую форму на React JSУстановить фокус на поле ввода формы в контролируемом компоненте

render: function(){  
    return (
     <div>         
      <form onSubmit={this.hanldeSubmit} > 
       <input 
        type='text' placeholder='What do you need to do?' required 
        onChange={this.handleChange} value={this.state.value} 
       /> 
       <button className='button expanded'>Add Todo</button> 
      </form> 
     </div> 
    ); 
} 

Вот обработчик на кнопку. Я хочу сосредоточиться на области ввода. Скажите, пожалуйста, более правильный путь, делая это в контролируемом компоненте БЕЗ рефов:

hanldeSubmit: function(e){ 
    e.preventDefault(); 
    var {value} = this.state; 
    if(value){ 
     this.props.onAddTodo(value); 
     this.setState({value: ''}); 
    } 

    //how to set focus on input field?  
}, 

Я нашел этот код с рефов:

this.refs.todoText.focus() 

Заранее спасибо

UPDATE:


Хорошо, если я использую refs для установки фокуса:

this.refs.yourInputBox.focus(); 

Должен ли я держать элемент под контролем? Что такое «лучшая практика»?

ответ

3

Вы можете использовать это в своем поле ввода, чтобы установить автофокус по умолчанию, чтобы этот вход также установил значение ref для поля ввода.

<input 
type='text' ref="yourInputBox" placeholder='What do you need to do?' 
onChange={this.handleChange} value={this.state.value} 
autoFocus 
/> 

Используйте это в состоянии else, которое необходимо.

hanldeSubmit: function(e){ 
    e.preventDefault(); 
    var {value} = this.state; 
    if(value){ 
     this.props.onAddTodo(value); 
     this.setState({value: ''}); 
    } 
    else{ 
     this.refs.yourInputBox.focus(); 
    } 
} 

попробовать эту надежду он работает

+0

большое спасибо. Насколько я понимаю, он устанавливает фокус после вызова метода render. Но как установить фокус после отправки формы с пустым полем? – kurumkan

+1

Я верю, что даже после отправки формы автофокус останется. Если вы не хотите вводить пустое поле, просто введите его в поле ввода –

+1

' ' –

Смежные вопросы