È possibile eseguire qualcosa di simile in qualsiasi momento fino a quando il nodo d'ingresso è montato e c'è un riferimento ad esso:
const ReactDOM = require('react-dom')
if (document.activeElement === ReactDOM.findDOMNode(this.refs.searchInput))
si dovrà aggiungere un riferimento all'elemento di ingresso:
<input ref="searchInput" ...
Non dovresti farlo nel metodo render
, perché il nodo di input potrebbe non essere ancora montato. Utilizzare un metodo del ciclo di vita come componentDidUpdate
o componentDidMount
.
Un altro modo sarebbe quello di aggiungere listener di eventi per i focus
e blur
eventi all'interno del campo di introduzione:
<input type="text" onFocus={this.onFocus} onBlur={this.onBlur}...
Poi impostare stati nei gestori e verificare che lo stato nel metodo di rendering.
onBlur: function() {
this.setState({ focused: false })
},
onFocus: function() {
this.setState({ focused: true })
},
render: function() {
if (this.state.focused) {
// do something
}
<input onFocus={this.onFocus} onBlur={this.onBlur}...
}
Si noti che questo chiamerà una ri-renderizzare ogni volta che il nodo è focalizzata o sfocata (ma questo è ciò che si vuole, giusto?)
'findDOMNode' da allora è stato spostato sotto 'ReactDOM' –
@JamesBrierley Grazie! L'ho verificato e modificato la risposta per riflettere React.findDOMNode() non esiste più ma funziona come ReactDOM.findDOMNode() –