我正在使用 material-ui 制作电子应用程序。有些屏幕是主从,我使用列表来显示概览。我想让使用箭头键浏览此列表成为可能。是否有内置选项可以执行此操作?
如果它不是内置的,那么最好的方法是什么?
更新:我现在制作了自己的组件。不确定这是否是最佳解决方案,但似乎有效:
export default function NavigateList(props) {
const { children, data, ...other } = props;
const elements = data.map((val, i) => children(val, i));
function gotoPrevElement() {
const selected = elements.findIndex(e => e.props.selected);
if (selected > 0) {
const el = elements[selected - 1];
el.props.onClick(data[selected - 1]);
}
}
function gotoNextElement() {
const selected = elements.findIndex(e => e.props.selected);
if (selected > -1 && selected < elements.length - 1) {
const el = elements[selected + 1];
el.props.onClick(data[selected + 1]);
}
}
function handleKey(e) {
if (e.key === "ArrowDown") {
gotoNextElement();
}
if (e.key === "ArrowUp") {
gotoPrevElement();
}
}
return (
<List onKeyDown={handleKey} {...other}>
{elements}
</List>
);
}
这是一个如何使用它的示例:
<NavigateList data={people}>
{(p, i) => (
<ListItem
button
key={i}
selected={checkIfSelected(p)}
onClick={e => setSelected(p)}
>
<ListItemText
primary={p.primary}
secondary={p.secondary}
/>
</ListItem>
)}
</NavigateList>