Buscando ocultar/mostrar un componente en una aplicación web React/Nextjs/tailwind dependiendo del dispositivo en el que se encuentre el usuario (por ejemplo, escritorio vs tableta vs móvil) ya que hay ciertas teclas en el teclado disponibles para escritorio pero no para mesa y móvil ( por ejemplo, la tecla de tabulación). No quiero hacerlo por tamaño de pantalla ya que este es un problema del dispositivo (sin pestaña en el teclado) en lugar de un problema de tamaño de pantalla
Inicialmente, pensé en obtener el tipo de dispositivo (código al que se hace referencia en otro Q/A de stackoverflow), pero esto parece fallar cuando el usuario está en un dispositivo como un iPad y está usando la versión de escritorio para ese navegador (por ejemplo, safari de escritorio y no móvil safari). ¿Hay una mejor manera de manejar esto de modo que pueda verificar correctamente en qué dispositivo está el usuario para poder ocultar/mostrar el componente de reacción?
const getDeviceType = () => { const ua = navigator.userAgent; if (/(tablet|ipad|playbook|silk)|(android(?!.*mobi))/i.test(ua)) { return "tablet"; } if ( /Mobile|iP(hone|od)|Android|BlackBerry|IEMobile|Kindle|Silk-Accelerated|(hpw|web)OS|Opera M(obi|ini)/.test( ua ) ) { return "mobile"; } return "desktop"; };En JavaScript puede detectar el navegador con JavaScript usando window.navigator
El ejemplo de código según https://developer.mozilla.org/en-US/docs/Web/API/Window/navigator sería
var sBrowser, sUsrAg = navigator.userAgent; // The order matters here, and this may report false positives for unlisted browsers. if (sUsrAg.indexOf("Firefox") > -1) { sBrowser = "Mozilla Firefox"; // "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0" } alert("You are using: " + sBrowser); Pero para reaccionar hay otro paquete que puede usar que es npm install react-device-detect
El ejemplo de código sería
import { browserName, browserVersion } from "react-device-detect" console.log(`${browserName} ${browserVersion}`);Después de detectar el navegador, solo renderiza condicionalmente lo que quiera mostrar