Я пытаюсь найти более чистый способ использовать клавиши со стрелками для перемещения фокуса вверх и вниз в списке входов с использованием React. Список - это родительский компонент, входные данные - дети. Чтобы выяснить, какой ввод следует сосредоточить дальше, я даю каждому ребенку ref
, а также числовое id
, которое я использую для отслеживания порядка. Когда обнаружена клавиша со стрелкой, обратный вызов затем находит ребенка с правильным ref
и переходит в этот дочерний refs
, чтобы захватить вход и дать ему фокус.
Я новичок в React, это кажется довольно грязным, поэтому мне интересно, есть ли более чистые решения.
Код и рабочий jsfiddle:
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>;
}
});