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

252
Views
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 answers
Answer question

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 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!