如何在 React/Preact 中将焦点表示为状态的函数?

问题描述

我正在使用 Preact 构建日期选择器组件。到目前为止,我已经设法使动画正确并完成了事件处理。该组件具有如下图所示的交互:

enter image description here

组件本身被分成许多更小的组件,其中每个组件都有一些关于其本地状态的概念:

  • 日历 - 管理视图之间的状态和动画/转换的顶级组件
  • CenturyView - 呈现年份列表
  • YearView - 呈现给定年份的月份列表
  • MonthView - 日期选择器,主要呈现给定月份的天数。

此日历可以用作页面中的独立内联小部件,也可以在选择器/下拉菜单中使用,如下所示。下一个任务是为组件构建键盘可访问性。而且,这一直无处可去。焦点管理很快就变得一团糟。

由于 React 组件或组件系统的目的是将状态与 UI 分离,或者更多是关于制作 P0 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P11 P12 P13 object A_XS NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 A_S NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 A_M NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 A_L NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 A_XL NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 A NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 B_XS NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 B_S NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 B_M NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 B_L NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 B_XL NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 B NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 C_XS NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 C_S NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 C_M NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 C_L NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 C_XL NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 C NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 D_XS NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 D_S NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 D_M NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 D_L NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 D_XL NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 D NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 E NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 F NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 G NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 ,那么管理 Focus 相关状态的最佳方法是什么?就其本质而言,专注于命令式操作并经常使用 UI = Function(State)useRef 处理,但这些原语不足以在如此复杂的场景中轻松实现键盘可访问性。

所以问题是:

  • 处理焦点状态的最佳方法是什么?
  • 如何在同级组件(​​MonthView 到 YearView 或反之亦然)的不同 DOM 元素之间转换焦点?
  • 使用键盘箭头键在不同 DOM 元素之间更改焦点的最佳方法是什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)