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

282
Visualizações
Agregue elementos li a ul al hacer clic en el botón en React js

Estoy tratando de agregar un nuevo elemento li al elemento ul en el div de retorno de CommentList. Debe contener la entrada del usuario del campo <input type="text" /> .

Recibo este error: 'No se pueden leer las propiedades de nulo (leyendo 'valor')'

Probé algunas cosas, como crear nuevos elementos li en Enviar y agregarlos al elemento ul, pero no tuve suerte.

Resultado previsto

Al hacer clic el usuario, cualquier valor que esté en el campo de texto de entrada, creará un nuevo elemento li y lo agregará al elemento ul.

 const CommentList = (props) => { const [children, setChildren] = useState([]); setChildren((oldArray) => [ ...oldArray, document.querySelector("input[type='text']").value, ]); return (<div> <form> <input type="text" /> <input onSubmit={setChildren} type="button" value="Post" /> </form> <ul> </ul> </div>); }
about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

No debería mezclar React con métodos DOM nativos.

Este ejemplo:

  1. Tiene un estado para la lista de elementos y otro para el estado actual de la entrada.

  2. Cuando el valor de la entrada cambia, el estado de la input se actualiza.

  3. Cuando se hace clic en el botón, el estado de los items se actualiza con el estado de input , el estado de input se restablece y el elemento de entrada se reenfoca. ( useRef )

(Nota: usar <input> sin <form> es HTML válido, por eso podemos usar onClick en lugar de onSubmit ).

 const { useState, useRef } = React; function Example() { // Create a new reference which will be applied // to the input element const ref = useRef(null); // Initialise the states const [ items, setItems ] = useState([]); const [ input, setInput ] = useState(''); // When the input value changes update // the `input` state function handleChange(e) { setInput(e.target.value); } // When the button is clicked add the // `input` state to the `items` state, // reset the `input` state, and focus on // the input element function handleClick() { setItems([...items, input]); setInput(''); ref.current.focus(); } // `map` over the items array to produce an // array of list items return ( <div> <input ref={ref} onChange={handleChange} value={input} /> <button onClick={handleClick}>Save</button> <ul>{items.map(item => <li>{item}</li>)}</ul> </div> ); } ReactDOM.render( <Example />, document.getElementById('react') );
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.2/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.2/umd/react-dom.production.min.js"></script> <div id="react"></div>

about 4 years ago · Juan Pablo Isaza Relatório

0

El onSubmit tiene que estar en el formulario. El controlador onSubmit acepta un parámetro de evento, no puede usar el setter setChildren de esta manera.

Debe usar el estado para controlar el valor de entrada (el mejor enfoque aquí)

Finalmente, debe asignar el estado de sus children a JSX para representarlo en su devolución

intente esto (no probé el código, pero la idea está aquí):

 const CommentList = (props) => { const [children, setChildren] = useState([]); const [inputValue, setInputValue] = useState(""); return (<div> <form onSubmit={(e) => { e.preventDefault(); setChildren((oldArray) => [ ...oldArray, inputValue ]); setInputValue(""); }}> <input type="text" value={inputValue} onChange={e => setInputValue(e.target.value)} /> <input type="button" value="Post" /> </form> <ul> {children.map((child, index) => <li key={index}>{child}</li>)} </ul> </div>); }

Ve a echar un vistazo al documento de reacción:

  • formularios y entrada controlada
  • renderizado de lista
about 4 years ago · Juan Pablo Isaza Relatório

0

Primero cambie el nombre de su función onSubmit de setChildren porque es la misma función que se usa para actualizar el estado de los niños y cambie onSubmit a onClick. Prueba esto en su lugar: -

 export default function App() { const [children, setChildren] = useState([]); const handleSetChildren = (e) => { e.preventDefault(); setChildren((oldArray) => [ ...oldArray, document.querySelector("input[type='text']").value ]); }; return ( <div> <form> <input type="text" /> <input onClick={handleSetChildren} type="submit" value="Post" /> </form> <ul> {children.map((child) => ( <li key={child}>{child}</li> ))} </ul> </div> ); }
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