Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

248
Vistas
Problema de igualdad de texto mecanografiado en la función Autocompletar de la interfaz de usuario del material

Los datos se almacenan como:

 { iso: "gb", label: "United Kingdom", country: "United Kingdom" }, { iso: "fr", label: "France", country: "France" }

El valor pasado a Autocompletar es:

 { iso: "gb", label: "United Kingdom", country: "United Kingdom" }

Error informado en la consola

Material-UI: el valor proporcionado para Autocompletar no es válido. Ninguna de las opciones coincide con {"label":"United Kingdom","iso":"gb","country":"United Kingdom"} .

Error de tipo informado en value={}

Escriba 'cadena | IPaís' no se puede asignar al tipo 'IPaís | IPaís[] | nulo | indefinido'. El tipo 'cadena' no se puede asignar al tipo 'ICountry | IPaís[] | nulo | indefinido'.

Problema: pasar datos al componente no lo establece en la opción correspondiente, no tengo ideas sobre cómo resolver este problema.

Códigos y caja de emisión: https://codesandbox.io/s/charming-firefly-zl3qd?file=/src/App.tsx

 import * as React from "react"; import { Box, Typography, TextField, Button } from "@material-ui/core"; import { Autocomplete } from "@material-ui/lab"; import "./styles.css"; import { countries } from "./countries"; import { investors } from "./investor"; import { Formik } from "formik"; interface ICountry { iso: string; country: string; label: string; } const isoToFlag = (isoCode: string) => { if (isoCode) { return typeof String.fromCodePoint !== "undefined" ? isoCode .toUpperCase() .replace(/./g, char => String.fromCodePoint(char.charCodeAt(0) + 127397) ) : isoCode; } return ""; }; const App: React.FC = () => { const investor = investors.find(element => element.id === "123"); return ( <div className="App"> <Formik initialValues={{ address: { country: investor?.legal.address.country ? investor.legal.address.country : '', } }} onSubmit={(values, actions) => { console.log({ values, actions }); actions.setSubmitting(false); }} > {({ submitForm, isSubmitting, values, setFieldValue, setValues }) => { return ( <form> <Autocomplete id="country" options={countries} getOptionLabel={option => option.label} value={values.address.country} renderOption={(option: ICountry) => ( <Box display="flex" flexDirection="row" alignItems="center"> <Box mr={1}>{isoToFlag(option.iso)}</Box> <Box> <Typography variant="body2">{option.label}</Typography> </Box> </Box> )} onChange={(e: object, value: any | null) => { console.log('do the types match?', typeof value === typeof values.address.country); console.log('do the objects match?', value === values.address.country); console.log('the objects in question', value, values.address.country); console.log(" "); setFieldValue("address.country", value); }} renderInput={params => ( <TextField {...params} name="address.country" label="Country" variant="outlined" fullWidth /> )} /> <Button variant="contained" size="large" color="primary" disabled={isSubmitting} onClick={submitForm} > Submit </Button> </form> ); }} </Formik> </div> ); }; export default App;

países.ts

 import { ICountry } from "./investor"; export const countries: ICountry[] = [ { iso: "gb", label: "United Kingdom", country: "United Kingdom" }, { iso: "fr", label: "France", country: "France" } ];
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

El mensaje completo de Material-UI es:

Material-UI: el valor proporcionado para Autocompletar no es válido. Ninguna de las opciones coincide con {"label":"United Kingdom","iso":"gb","country":"United Kingdom"} . Puede usar la propiedad getOptionSelected para personalizar la prueba de igualdad.

La prueba de igualdad predeterminada es simplemente === , por lo que si sus opciones son objetos, su valor tendría que ser uno de esos objetos exactos para que coincidan. Un objeto diferente con los mismos valores no coincidirá.

Pero como le indica el mensaje, puede personalizar la prueba de igualdad a través de la propiedad getOptionSelected . Por ejemplo, podría especificar:

 getOptionSelected={(option, value) => option.iso === value.iso}

o podría hacer una verificación de igualdad profunda de todas las propiedades del objeto.

El error de tipo se puede corregir con value={values.address.country as ICountry} .

Aquí hay una versión funcional de su sandbox: https://codesandbox.io/s/autocomplete-getoptionselected-b6n3s

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda