• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

181
Vistas
El campo de texto Material-ui pierde el foco después de volver a renderizar. ¿Como arreglarlo?

Estoy usando Material-ui Textfield para representar un objeto de matriz repetible:

 const [sections, setSections] = useState([ { Title: "Introduction", Text: "" }, { Title: "Relationship", Text: "" }, { Title: "Monitoring", Text: "" } ]);

Estoy representando las secciones con la función .map. El problema es que estoy usando en mis Textfields:

 <TextField value={el.Title} onChange={(event) => { el = { ...el, Title: event.target.value }; sections[ind] = el; console.log(sections); return setSections([...sections]); }} variant="outlined" label={`Section ${ind + 1}`} style={{ margin: "auto" }} />

este método onChange. Cada vez que cambio algo en Textfield, pierde el foco. También estoy usando TextareaAutosize y el mismo método para onChange:

 <TextareaAutosize label="Message" variant="outlined" placeholder="Write here..." value={el.Text} onChange={(event) => { el = { ...el, Text: event.target.value }; sections[ind] = el; console.log(sections); return setSections([...sections]); }} className={classes.messageStyle} style={{ width: "70%", marginLeft: "2.5%" }} minRows={5} />

Pero aquí NO estoy perdiendo el enfoque y todo funciona perfectamente bien. Descubrí que perder el foco es el resultado de volver a renderizar las secciones después de establecer un nuevo estado. Esto significa que se supone que TextField es un componente nuevo y es por eso que pierdo el enfoque. La pregunta es por qué con TextareaAutosize no enfrento este problema y cómo puedo solucionarlo para TextField.

Aquí está la caja de arena:

https://codesandbox.io/s/antiguo-trabajador-td4bm?file=/src/App.js:1023-1239

about 3 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

ingrese la descripción de la imagen aquí

El problema está aquí, en cada renderizado (cambio de título) esta clave se cambia, y React lo considerará como un elemento nuevo, por lo que eliminará el contenido de texto anterior dentro de ese cuadro y renderizará nuevos contenidos, por lo que en cada cambio de título, React se está cargando. nuevo campo de texto por eso pierde su foco.

 {sections.map((el, ind) => ( <Box key={ind} style={{ width: "90%", margin: "0 auto" }}

esto resolverá tu problema

about 3 years ago · Juan Pablo Isaza 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 Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda