Cómo crear menús desplegables asincrónicos que se puedan buscar con React-Select
Introducción
HTML proporciona un select
elemento que permite a los usuarios finales elegir entre un menú desplegable de option
opciones. Sin embargo, puede haber situaciones en las que un menú de selección pueda beneficiarse de mejoras adicionales en la experiencia del usuario, como permitir al usuario filtrar las opciones disponibles.
React Select es una biblioteca de menús de selección altamente configurable para React que incluye búsqueda y filtros dinámicos. También admite la carga asincrónica de opciones, accesibilidad y tiempos de renderizado rápidos.
En este tutorial, agregarás React Select a un proyecto. También explorarás algunas de las funciones adicionales disponibles: selección múltiple, opciones que puede crear el usuario y carga de opciones asincrónica.
Prerrequisitos
Para completar este tutorial, necesitarás:
- Un entorno de desarrollo local para Node.js. Siga el procedimiento Cómo instalar Node.js y crear un entorno de desarrollo local para lograrlo.
Este tutorial fue verificado con Node v14.7.0, npm
v6.14.7, react
v16.13.1 y react-select
v3.1.0.
Paso 1: Configuración del proyecto
Comience a usar create-react-app
para generar una aplicación React y luego instale las dependencias:
- npx create-react-app react-select-example
Cambiar al nuevo directorio del proyecto:
- cd react-select-example
Ahora, puedes ejecutar la aplicación React:
- npm start
Corrija cualquier error o problema con su proyecto y luego visítelo localhost:3000
en un navegador web.
Una vez que tenga una aplicación React en funcionamiento, puede comenzar a agregar React Select.
Paso 2: agregar React Select
Su proyecto requerirá la instalación de la react-select
biblioteca:
- npm install react-select@3.1.0
Nota: Actualmente, hay un problema con la última versión de la biblioteca (3.1.0), que genera advertencias sobre API antiguas y obsoletas al usar StrictMode
. Estos son problemas conocidos y algunas solicitudes de incorporación de cambios pendientes solucionarán algunos de ellos.
A continuación se muestra un ejemplo de modificación App.js
para mostrar un menú desplegable de animales acuáticos:
- nano src/App.js
Agregue una matriz aquaticCreatures
y use el Select
componente proporcionado por React Select:
fuente/App.js
import React from 'react';import Select from 'react-select';const aquaticCreatures = [ { label: 'Shark', value: 'Shark' }, { label: 'Dolphin', value: 'Dolphin' }, { label: 'Whale', value: 'Whale' }, { label: 'Octopus', value: 'Octopus' }, { label: 'Crab', value: 'Crab' }, { label: 'Lobster', value: 'Lobster' },];function App() { return ( div className="App" Select options={aquaticCreatures} / /div );}export default App;
Notarás tres cosas:
- Debes importar el
Select
componente desdereact-select
. - Cada objeto de la matriz de opciones
aquaticCreatures
debe tener al menos dos valores:label
, una cadena, yvalue
, que puede ser de cualquier tipo. - La única propiedad requerida es la
options
matriz.
Nota: Si está completando su componente React Select con una matriz de cadenas, en lugar de repetir manualmente label
y value
, puede usar el método map array de JavaScript para preparar la options
matriz:
someArrayOfStrings.map(opt = ({ label: opt, value: opt }));
Para capturar cuándo el usuario selecciona una opción, agregue la onChange
propiedad:
fuente/App.js
Select options={aquaticCreatures} onChange={opt = console.log(opt.label, opt.value)}/
El valor que se pasa a la onChange
función es el mismo objeto que compone la opción en sí, por lo que contendrá las variables label
y value
.
Ejecute su proyecto:
- npm start
Luego, visite localhost:3000
en su navegador web.
Se le presentará un menú React Select con aquaticCreatures
:
Si interactúa con este menú, activará un onChange
evento y registrará mensajes en la consola. Al abrir la consola de desarrollador de su navegador, debería observar el label
y value
de sus opciones:
Output'Shark' 'Shark'
Ahora que tienes un menú React Select en funcionamiento, puedes explorar algunas de las otras características que ofrece esta biblioteca.
Paso 3: Agregar opciones avanzadas
Además de la búsqueda y selección, React Select ofrece otras funciones como selección múltiple, opciones creables por el usuario y carga de opciones asincrónica.
Selección múltiple
HTML select
admite multiple
la selección de varios option
s.
De manera similar, en React Select, puedes habilitar la selección múltiple agregando la isMulti
propiedad a tu elemento:
fuente/App.js
Select options={aquaticCreatures} isMulti/
Para fines de exploración, onChange
también será necesario modificar la propiedad para que admita la selección múltiple, ya que opt
ya no es un objeto único. Con la selección múltiple, se convierte en un objeto anidado opt.label
y, opt.value
de lo contrario, habría devuelto undefined
.
fuente/App.js
Select options={aquaticCreatures} isMulti onChange={opt = console.log(opt)}/
Ejecute su proyecto:
- npm start
Luego, visite localhost:3000
en su navegador web.
Seleccione una opción de la lista aquaticCreatures
y, a continuación, seleccione otra. Todas las selecciones múltiples deben estar indicadas por el componente:
Con esto concluye la función de selección múltiple.
Opciones que puede crear el usuario
Puede proporcionar opciones que puedan crear los usuarios para permitirles agregar valores personalizados al menú de selección en situaciones donde la opción que desean no está presente en el menú.
Primero, debes importar el Creatable
componente desde react-select/creatable
:
fuente/App.js
import Creatable from 'react-select/creatable';
Luego, reemplace el Select
componente con Creatable
:
fuente/App.js
Creatable options={aquaticCreatures}/
Para fines de exploración, onChange
también será necesario modificar la propiedad para mostrar el meta
valor:
fuente/App.js
Creatable options={aquaticCreatures} onChange={(opt, meta) = console.log(opt, meta)}/
Ejecutar el proyecto:
- npm start
Cuando escribe una opción que no existe actualmente (por ejemplo Cuttlefish
), se le presentará una 'Create'
opción:
Después de crear el nuevo elemento de menú, debería observar lo siguiente en la salida de la consola de desarrollador de su navegador:
Output{ label: 'Cuttlefish', value: 'Cuttlefish', __isNew__: true }{ action: 'create-option' }
Tenga en cuenta que tiene dos formas de detectar que el evento es una nueva opción: la __isNew__
variable de la opción seleccionada y el action
valor del meta
argumento en el controlador de eventos.
Además, observe cómo label
y value
serán cadenas idénticas. A los usuarios no se les proporciona una opción para proporcionar a label
con un diferente value
, lo que puede afectar la forma en que aborda su solución para lograr coherencia en su almacén de datos.
Con esto concluye la función de opciones que puede crear el usuario.
Carga de opciones asincrónicas
Puede utilizar la opción de carga asincrónica para permitir que los usuarios experimenten tiempos de carga iniciales más rápidos en su aplicación. Esto solo completará el componente cuando el usuario interactúe con él.
Al igual que el Creatable
componente, necesitarás importar AsyncSelect
desde react-select/async
:
import AsyncSelect from 'react-select/async'
Luego, reemplace el Select
componente con Async
:
fuente/App.js
AsyncSelect loadOptions={loadOptions}/
Para cargar las opciones, pase a la loadOptions
propiedad una función similar a la siguiente:
const loadOptions = (inputValue, callback) = { // perform a request const requestResults = ... callback(requestResults)}
React Select también admite la defaultOptions
propiedad prop, que llama a la loadOptions
función en la inicialización para completar el menú desplegable, y la cacheOptions
propiedad prop, que almacena en caché las opciones mientras su valor sea verdadero.
Con esto concluye la función de carga de opciones asíncronas.
Conclusión
En este tutorial, agregaste React Select a un proyecto. El conjunto de funciones y personalización de React Select tiene el potencial de brindarles a tus usuarios una mejor experiencia que un menú de selección estándar.
Puede encontrar información adicional sobre las propiedades y las funciones avanzadas en la documentación de React Select.
Si desea obtener más información sobre React, eche un vistazo a nuestra serie Cómo codificar en React.js o consulte nuestra página de temas de React para ver ejercicios y proyectos de programación.
Deja una respuesta