Análisis de causas y soluciones al problema de que varios teclados textInput no se pueden recuperar en React-native
Encontré un error de este tipo en el proyecto:
Hay tres entradas de texto en la página actual y la página se procesa para retraerse automáticamente al hacer clic en el área en blanco de el teclado.
La situación normal es: seleccione una entrada de texto, ingrese el contenido, luego haga clic en el área en blanco, el teclado regresa, luego seleccione la siguiente entrada de texto nuevamente, el teclado aparece nuevamente, luego ingrese el contenido , haga clic en el área en blanco, el teclado devolverá Retiro, y así sucesivamente. Tienes que seleccionar y desmarcar uno por uno para que funcione.
En el uso real, los usuarios a menudo ingresan contenido en la primera entrada de texto, luego seleccionan directamente la segunda entrada de texto, ingresan el contenido y luego seleccionan la siguiente. Después de ingresar todo el contenido, hacen clic en Área vacía, necesita teclado. para ser restaurado. Entonces apareció el error. Verá que el teclado no se puede retraer en este momento. Después de muchas pruebas, descubrí que tenía que marcar el cuadro de entrada para que el teclado apareciera y luego hacer clic en el espacio vacío para que el teclado se retraiga correctamente.
Busqué mucho en línea pero no pude encontrar una solución, así que tuve que buscar en el código fuente.
En el directorio reaccionar-nativo/Bibliotecas/Componentes/TextInput. Busque el método correspondiente en TextInputState, que es el método blueTextInput. Es necesario pasar _currentlyFocusedID para recuperar el teclado.
Al agregar registros al código fuente, podemos determinar paso a paso que el valor de identificación se crea en función de TextInput cuando se selecciona un TextInput y aparece el teclado. La causa principal del problema es que. cuando el primer teclado no se retrae Cuando se selecciona directamente el segundo textInput, dado que el objeto de teclado existe, no volverá a ejecutar el método emergente del teclado. Como resultado, cuando se selecciona otra entrada de texto, el _currentlyFocusedID del actual. El teclado está vacío, por lo que cuando hace clic en el área en blanco y necesita Al recuperar el teclado, el textFieldID pasado en el método blurTextInput está vacío, lo que hace que no se pueda recuperar el teclado.
Ahora que se ha encontrado la causa del error, ¿cómo solucionarlo?
El primer método es simple y tosco: modifica el código fuente y elimina las condiciones de juicio sin pensar, pero puede provocar más errores desconocidos.
La segunda es gestionar el ID correspondiente al teclado.
La segunda solución se describe a continuación.
El primer paso es importar el archivo TextInputState en el archivo de página.
En el segundo paso, utilice el método de selección TextInput para registrar el currentFocusedID del teclado actual a través de una variable.
En el tercer paso, cuando necesite retraer el teclado, llame al método focusTextInput, pase el currentFocusedID a TextInputState y luego llame al método blurTextInput en TextInputState para retraer el teclado.
Paso 4, prueba el efecto tú mismo.
Lo anterior es una introducción para analizar y abordar el problema de no poder recuperar el teclado. Si tiene una solución mejor, compártala.