Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

148
Visualizações
¿Cómo deshabilitar el botón de acuerdo con la longitud de entrada usando React useState?

Tengo una página simple con campos de entrada y un botón y quiero desactivar el botón cuando la longitud de ambos campos es inferior a 3. Es algo simple, pero estoy confundido acerca del gancho porque entra en un bucle infinito. Aquí está el código:

 function TableFooterPanel(props) { const [firstName, setFirstName] = useState(''); const [lastName, setLastName] = useState(''); // const [isButtonDisabled, setIsButtonDisabled] = useState(true); const addNewCustomer = async (name, surname) => { await service.addCustomer(name, surname); props.funcParam(); } var isButtonDisabled = false; if (firstName <= 3 || lastName <= 3) { isButtonDisabled = true; } else { isButtonDisabled = false; } return ( <> <Card className='buttonFooter'> <Form className='buttonFooter'> <input type="text" placeholder="First Name" defaultValue={firstName} onChange={e => setFirstName(e.target.value)}></input> <input type="text" placeholder="Last Name" defaultValue={lastName} onChange={e => setLastName(e.target.value)}></input> <Button disabled={isButtonDisabled} onClick={() => addNewCustomer(firstName, lastName)}>Add</Button> </Form> </Card> </> ); } export default TableFooterPanel;

Con este código, las casillas solo marcan si están vacías o llenas.

Si elimino el comentario useState hook y trato de configurarlo en la condición if-else, entonces esta vez está ocurriendo un bucle infinito y la página se bloquea.

¿Cómo puedo verificar la longitud de entrada sin caer en un bucle infinito?

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Probar :

 if (firstName.length <= 3 || lastName.length <= 3) { isButtonDisabled = true; } else { isButtonDisabled = false; }
about 4 years ago · Juan Pablo Isaza Relatório

0

Le sugiero que no escriba código directamente en el cuerpo del componente: no sabe cuántas veces se ejecutará ese código. Mucho mejor usa un gancho useEffect :

 function TableFooterPanel(props) { const [firstName, setFirstName] = useState(''); const [lastName, setLastName] = useState(''); const [isButtonDisabled, setIsButtonDisabled] = useState(true); const addNewCustomer = async (name, surname) => { await service.addCustomer(name, surname); props.funcParam(); } useEffect(() => { if (firstName.length <= 3 || lastName.length <= 3) { setIsButtonDisabled(true); } else { setIsButtonDisabled(false); } }, [firstName, lastName]); return ( <> <Card className='buttonFooter'> <Form className='buttonFooter'> <input type="text" placeholder="First Name" defaultValue={firstName} onChange={e => setFirstName(e.target.value)}></input> <input type="text" placeholder="Last Name" defaultValue={lastName} onChange={e => setLastName(e.target.value)}></input> <Button disabled={isButtonDisabled} onClick={() => addNewCustomer(firstName, lastName)}>Add</Button> </Form> </Card> </> ); } export default TableFooterPanel;

Como puede ver, he usado un gancho useEffect con firstName y lastName en la lista de deps: esto significa que, cada vez que firstName o lastName cambien, useEffect se activará.

Y no olvide eso, para verificar la longitud de la cadena, debe usar la propiedad de length =).

about 4 years ago · Juan Pablo Isaza Relatório

0

Aquí tienes: demostración de Codesandbox

Simplemente podría agregar el argumento deshabilitado en línea de esta manera:

 <button disabled={firstName.length < 3 || lastName.length < 3} onClick={() => addNewCustomer(firstName, lastName)} > Add </button>
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda