Il JSX:Set concentrarsi su un campo di reagire-bootstrap.Input utilizzando 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>
);
},
});
Note:
- Il campo di immissione è una classe
react-bootstrap.Input
. - Il getDOMNode(). Concentrarsi() concetto è da Facebook react docs
Quando il pulsante gestore onclick viene eseguito, il campo di inserimento e-mail dovrebbe essere sempre la messa a fuoco, ma non sta accadendo. Ho trovato che la classe field di input reacst-bootstrap sta rendendo il vero campo di input DOM all'interno di un div wrapping. Questa è l'uscita del 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>
Così si presenta come l'ingresso non è sempre la messa a fuoco perché il focus è applicato sulla confezione div, che lo respinge (io uso document.activeElement
nella console per controllare).
La domanda è: come concentrarsi sull'elemento reale input
?
Nota: Un po 'estraneo ma React rispetta la proprietà autoFocus
. È utile nel caso in cui sia necessario impostare lo stato attivo subito dopo il rendering. Tuttavia, non è un sostituto per il modo programmatico.
E 'importante notare che se si utilizza Reagire 0.13 si dovrebbe scrivere 'React.findDOMNode()' e dopo React 0,14 voi dovrebbe usare 'ReactDOM.findDOMNode()'. –