javascript - 如何在反应中创建一个元素并将 aria-live 用作其上的自定义挂钩
问题描述
有没有办法创建一个自定义钩子,该钩子能够创建一个组件,该组件将充当 aria-live 的播音员来宣布应用程序中的动态变化?
目前我正在使用这样的东西:
export const useAnnouncer = () => {
const [message, setMessage] = useState<string | null>(null)
const setAnnouncer = (m: string) => setMessage(m)
const announcer = (
<div className="sr-only" aria-live="polite" aria-atomic="true" >
{message}
</div>
)
return [announcer, setAnnouncer] as const
实际上,它的作品。但这不是我的问题。因为现在 aria-live 元素的包装器正在调用 hook 的组件中创建。
例如:
const Controls = () => {
const [announcer, setAnnouncer] = useAnnouncer()
const handleClick = () => {
setAnnouncer('test')
}
return (
<div>
{announcer}
<nav><button onClick={(e: ButtonEvent) => handleClick(e, firstPage)}>test</button></nav>
</div>
)
}
我想避免{announcer}
在我的 jsx 中。是否可以为 aria-live 创建一个包装器,useAnnouncer
并且只在组件中设置 setAnnouncer 来处理语音通知?
解决方案
推荐阅读
- java - REST 服务是否有任何 Spring Security 扩展?
- ios - 无法解析“NIL”值(DispatchQueue、VNCoreMLRequest)
- ios - IOS - 如何修复“ld: library not found for -lBolts”错误?
- jquery - jQuery延迟功能的问题
- linux - 在 AWS Workspace 上使用 apt-get?
- pandas - 使用多个滑块在单个图形中操作曲线
- python - 从非特权应用程序执行特权命令的正确方法
- vue.js - VueJS 和动态标题
- python - anaconda navigator 在加载应用程序时卡住了
- acumatica - 新实例忘记密码