Sto cercando di capire un modo più semplice per utilizzare i tasti freccia per spostare l'attivazione su e giù in un elenco di input utilizzando React. L'elenco è il componente principale, l'input i bambini. Per capire quale input dovrebbe essere messo a fuoco in seguito, fornisco a ogni bambino un ref
e un numero numerico id
che uso per tenere traccia dell'ordine. Quando viene rilevato un tasto freccia, il callback trova il bambino con il ref
corretto e entra in quello refs
di quel bambino per prendere l'input e focalizzarlo.Modo più semplice per modificare l'attenzione sui componenti figlio in React
Sono nuovo a React, mi sento abbastanza sporco, quindi mi chiedo se c'è una soluzione più pulita.
Codice e jsfiddle di lavoro:
var Child = React.createClass({
handleUp: function(e) {
switch(e.key) {
case "ArrowDown":
this.props.handleFocus(this.props.id+1);
break;
case "ArrowUp":
this.props.handleFocus(this.props.id-1);
break;
}
},
render: function() {
return <div><input defaultValue={this.props.name} onKeyUp={this.handleUp} ref="input" /></div>;
}
});
var Parent = React.createClass({
handleFocus: function(id) {
var child = this.refs['child' + id];
if (!child) return;
var input = child.refs.input;
input.getDOMNode().focus();
},
render: function() {
var inputs = [];
for (var i=0; i<10; i++) {
inputs.push(<Child key={i} id={i} name={"value" + i} handleFocus={this.handleFocus} ref={'child' + i} />);
}
return <div>
{inputs}
</div>;
}
});
http://jsfiddle.net/69z2wepo/509/
Non sarebbe più semplice impostare un indice di tabulazione corretto sugli elementi di input e lasciare che l'utente navighi nei campi di input con il tasto tab (shift + tab all'indietro), che è il modo standard per farlo. http://www.w3.org/TR/1999/REC-html401-19991224/interact/forms.html#adef-tabindex –
Per questo particolare scenario volevo davvero che i tasti freccia agissero, ma in generale le schede yeah sono un buona idea – mikhuang
il tuo jsfiddle non funziona – Soorena