目前我正在处理类似的问题。
假设你有这样的状态:
items = [
{
name: 'a',
onFocus: true
},
{
name: 'b',
onFocus: false
}
];
在你lifecicle方法添加和删除enent听众
componentWillMount() {
document.addEventListener("keydown", this.handleKeyDown, false);
}
componentWillUnmount() {
document.removeEventListener("keydown", this.handleKeyDown);
}
这里是handleKeyDown - 你只是在处理程序中设置的onfocus值:
handleKeyDown(e) {
let index = -1;
const items = this.state.items;
items.map((item, i) =>{
if(item.onFocus)index = i;
});
switch(e.keyCode) {
case 74:
e.preventDefault();
if(index > 0) i--;
break;
case 75:
e.preventDefault();
if(index < this.state.items.length - 1) i++;
break;
}
for(let i = 0; i < items.length; i++) {
items[i].onFocus = i === index;
}
this.setState({items});
}
并取决于哪个元素onFocus
设置为true - 您可以设置(例如)适当的类别:
<ul>
{this.props.data.map((item, i) => {
<li key={i}>
<Component component={item} className={item.onFocus ? 'active' : ''} />
</li>
})}
</ul>
向我们显示您的代码。你在寻找[focus](https://stackoverflow.com/questions/17500704/javascript-set-focus-to-html-form-element)方法吗? –
我用代码更新了它。我正在研究焦点方法,但我想知道是否有方法或其他方法将焦点移动到列表中的下一个项目? –