Y el sitio WAI, o el sitio APG, tiene un patrón para eso. Se llama el Patrón de Divulgación Así Ocultar. Está documentado. Y tienes que tener estas tres interacciones primarias de teclado para resolver ese criterio. Tienes que soportar, digamos, pulsaciones de barra espaciadora y tecla enter, pulsaciones de tecla escape, clics de ratón.
Y para hacer eso en React, empiezas con el elemento de botón JSX, que, bajo el capó, renderiza un elemento de botón HTML, que, por defecto, soporta clics de ratón, pulsaciones de tecla enter, y pulsaciones de barra espaciadora gratis. Magia. Genial. Entonces, una vez que tienes eso, es cuando añades justo el soporte ARIA suficiente para que los lectores de pantalla sepan cuándo ese widget va a ser abierto y cerrado. Y en el caso de si tienes muchos widgets en la página, ¿qué contenedor en esa página se está abriendo y cerrando?
Así que en nuestro botón, vamos a añadir el atributo ARIA controls para decirle a la tecnología asistiva qué elemento está controlando el botón. En este caso, es el ID del contenedor. Y luego vamos a añadir ARIA expanded para decir si el widget está expandido o no. Es booleano. Y ARIA label en casos en que necesitamos una etiqueta de botón más precisa, especialmente si estamos haciendo botones de iconos. Y luego vamos a añadir estado y manejadores de clic para alternar la apertura y cierre del contenedor. Así que cuando hacemos eso, vamos a usar el hook use date. Y definir set como open e inicializar use date a false. Y opcionalmente, vamos a establecer una prop expanded por defecto para usar date en esos casos en que tenemos que tener nuestro widget abierto por defecto. Por ejemplo, si estás trabajando en un banco y tienes que tener un widget de términos de servicio, abierto por defecto. Eso es algo que los bancos tienen que hacer. Así que es bueno tener esa prop en tu componente.
Luego, cuando tienes ese estado definido, puedes meterlo en una función de apertura de alternancia y alternar ese set is open a false con esa función de apertura de alternancia. Mete esa función en tu manejador de clics. Y luego en tu prop re-expanded de botones, la prop re-expanded comunicará si está abierto a false dependiendo de esa prop is open. Luego, en tu div, puedes meter esa prop is open con los hijos y sólo renderizar los hijos si esa prop is open es true. Ahora tienes los fundamentos de un widget de divulgación. Luego puedes añadir un poco de mejoras, como si quieres llevarlo un poco más allá con UX, como la gestión del enfoque. Y esto es como el avance. El patrón mejorado para los widgets de divulgación. Por ejemplo, cuando usas la tecla escape, cuando cierras el widget con la tecla escape devolverá el enfoque justo de vuelta a ese botón.
Comments