В JSX:Установить фокус на поле реагирует-bootstrap.Input с использованием refs.x.getDOMNode.focus
var Button = require("react-bootstrap").Button;
var Input = require("react-bootstrap").Input;
var MyClass = React.createClass({
onclick: function() {
this.refs.email.getDOMNode().focus();
console.log('DOM element', this.refs.email.getDOMNode());
}
render: function() {
return (
<div>
<Button onClick={this.onlick}>Login</Button>
<Input ref='email' type='email' />
</div>
);
},
});
Примечание:
- Поле ввода является
react-bootstrap.Input
классом. Концепция - getDOMNode(). фокус() от Facebook react docs
При запуске кнопки OnClick обработчик, то поле ввода электронной почты должен получать фокус, но это не происходит. Я обнаружил, что класс Input-bootstrap Input field представляет собой реальное поле ввода DOM внутри оберточного div. Это выход console.log:
<div class="form-group" data-reactid=".1awy8d4e9kw.1.3.$=1$3:0.0.0.1.0">
<input class="form-control" type="email" data-reactid=".1awy8d4e9kw.1.3.$=1$3:0.0.0.1.0.1:$input">
</div>
Так выглядит вход не получает фокус, потому что фокус применяется на оберточной DIV, который отклоняет его (я использую document.activeElement
в консоли, чтобы проверить).
Вопрос, как сфокусироваться на реальном input
элемент?
Примечание: Немного несвязанный, но React уважает имущество autoFocus
. Это полезно, если фокус необходимо установить сразу после рендеринга. Тем не менее, это не заменяет программный путь.
Важно отметить, что при использовании Реагировать 0.13 вы должны написать 'React.findDOMNode()' и после Реагировать 0.14 вам следует использовать 'ReactDOM.findDOMNode()'. –