Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

474
Views
React-select se queda en blanco cuando cambia la matriz de opciones (codesandbox incluido)

Estoy tratando de usar react-select en combinación con match-sorter como se describe en esta respuesta de stackoverflow ( su versión de trabajo ). Tengo una matriz inicial de objetos que se asignan a una matriz de objetos con el value y las propiedades de label requeridas por react-select, que se almacena en el estado. Esa matriz se pasa directamente a reaccionar-seleccionar, y cuando hace clic por primera vez en el cuadro de búsqueda, todo se ve bien, todas las opciones están ahí. La prop onInputChange recibe una llamada a matchSorter, que a su vez recibe la matriz, el nuevo valor de entrada y la clave en la que se deben ordenar los objetos. En mi proyecto, y reproducido en la caja de arena, tan pronto como escribe algo en el campo de entrada, todas las opciones desaparecen y se reemplazan por el mensaje no options . Si hace clic fuera del cuadro y vuelve a entrar, las opciones ordenadas se muestran como deberían. Vea mi caja de arena para el problema, y aquí está el código de la caja de arena:

 import "./styles.css"; import { matchSorter } from "match-sorter"; import { useState } from "react"; import Select from "react-select"; const objs = [ { name: "hello", id: 1 }, { name: "world", id: 2 }, { name: "stack", id: 3 }, { name: "other", id: 4 }, { name: "name", id: 5 } ]; const myMapper = (obj) => { return { value: obj.id, label: <div>{obj.name}</div>, name: obj.name }; }; export default function App() { const [options, setOptions] = useState(objs.map((obj) => myMapper(obj))); return ( <Select options={options} onInputChange={(val) => { setOptions(matchSorter(options, val, { keys: ["name", "value"] })); }} /> ); }

Estoy seguro de que la matriz en estado no se elimina ni nada, he registrado en la consola cada paso del camino y la matriz definitivamente se clasifica correctamente por el clasificador de coincidencias. Es solo que tan pronto como escribe algo, reaccionar-seleccionar deja de mostrar cualquier opción hasta que haga clic para salir y volver a entrar. ¿Tiene algo que ver con el uso de JSX como valor de label ? Estoy haciendo eso en mi proyecto para mostrar una imagen junto con las opciones.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Tuve que hacer dos cosas para que tu código funcionara:

  1. label: <div>{obj.name}</div> con label: obj.name en su función de mapeo.

    No estoy seguro de si reaccionar-seleccionar permite nodos html como etiquetas. Su documentación simplemente lo define como type OptionType = { [string]: any } que es demasiado genérico para cualquier cosa.

  2. La lista proporcionada a matchSorter para hacer coincidir debe ser la lista completa (con todas las opciones). Estaba proporcionando la lista filtrada de la coincidencia anterior (del estado del componente).

 const objs = [ { name: "hello", id: 1 }, { name: "world", id: 2 }, { name: "stack", id: 3 }, { name: "other", id: 4 }, { name: "name", id: 5 } ]; const myMapper = (obj) => { return { value: obj.id, label: obj.name, // -------------------- (1) name: obj.name }; }; const allOptions = objs.map((obj) => myMapper(obj)); export default function App() { const [options, setOptions] = useState(allOptions); return ( <Select options={options} onInputChange={(val) => { setOptions( matchSorter( allOptions, // ----------------> (2) val, { keys: ["name", "value"] } )); }} /> ); }
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!