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

219
Views
reaccionar: no se puede establecer el valor para el cuadro de entrada

Estoy haciendo 2 entradas otp en mi aplicación.

En Input.tsx , estoy usando react-otp-input para la funcionalidad otp
si

 <OtpInput value={"abcde"} ... numInputs={5} />

La interfaz de usuario de react-otp-input será

ingrese la descripción de la imagen aquí

Ahora el problema es que cuando trato de cambiar el valor de otp, arroja un error

 Cannot set properties of undefined (setting 'value')

¿Cómo puedo arreglarlo?

Entrada.tsx

 import React, { useState } from "react"; import OtpInput from "react-otp-input"; type InputPropType = { value: string; setValue: (event: string) => void; }; function Input(props: InputPropType): JSX.Element { const { value, setValue } = props; return ( <OtpInput value={value} onChange={(e: string) => { setValue(e); }} numInputs={5} /> ); } export default Input;

Aplicación.tsx

 import React, { useState } from "react"; import Input from "./Input"; export default function App() { type InputValueType = { id: number; value: string; }; const [inputValues, setInputValues] = useState<Array<InputValueType>>([ { id: 0, value: "" }, { id: 1, value: "" } ]); const InputGroup = () => { let numOfInputs: number = 2; var rows: Array<any> = []; for (var i = 0; i < numOfInputs; i++) { let inputValue: InputValueType = inputValues[i]; rows.push( <Input key={inputValue.id} value={inputValue.value} setValue={(event: string) => { let inputValuesTemp = inputValues; inputValuesTemp[i]["value"] = event; setInputValues(inputValuesTemp); }} /> ); } return <>{rows}</>; }; return ( <div className="App"> <InputGroup /> </div> ); }

codigosandbox
https://codesandbox.io/s/react-typescript-forked-s38ck9?file=/src/App.tsx:0-918

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

0

Pocas cosas por corregir,

  1. Hay un problema con los cierres en su ciclo for ya que usó var en lugar de let . Todas las variables i se refieren al mismo cierre de bucle for en el bucle for, lo que significa que i es 2 al final de la iteración. Todos los inputValuesTemp[i] ahora se resuelven en inputValuesTemp[2] que definitivamente no está undefined .

Reemplace var con let para crear cierres para cada iteración del bucle.

 for (let i = 0; i < numOfInputs; i++) {...}
  1. Y también necesita obtener una copia de la matriz de valores para reaccionar para hacer una nueva representación (para informar que la matriz ha cambiado).
 let inputValuesTemp = [...inputValues];
  1. Su componente InputGroup estaba dentro del componente App , lo que provocó que perdiera el enfoque con cada pulsación de tecla. Para solucionar el problema de enfoque, mueva el InputGroup fuera de la App y manténgalo como un componente separado.
 import React, { useState } from "react"; import Input from "./Input"; type InputValueType = { id: number; value: string; }; const InputGroup = () => { const [inputValues, setInputValues] = useState<Array<InputValueType>>([ { id: 0, value: "" }, { id: 1, value: "" } ]); let numOfInputs: number = 2; var rows: Array<any> = []; for (let i = 0; i < numOfInputs; i++) { let inputValue: InputValueType = inputValues[i]; rows.push( <Input key={inputValue.id} value={inputValue.value} setValue={(event: string) => { let inputValuesTemp = [...inputValues]; inputValuesTemp[i]["value"] = event; setInputValues(inputValuesTemp); }} /> ); } return <>{rows}</>; }; export default function App() { return ( <div className="App"> <InputGroup /> </div> ); }

Editar React Typescript (bifurcado)

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!