Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

393
Vistas
React.js: guardar elementos después de actualizar la página

Estoy haciendo un Todolist simple en react.js. Hasta ahora puedo guardar mis objetos en LocalStorage, pero cuando actualizo la página, los elementos Todo desaparecen.

 import React, { useState,useEffect } from 'react' import TodoList from './TodoList.jsx' const AddTodo = () => { const [newTodo, setNewTodo] = useState('') const [list, setList] = useState([]) const handleSubmit = () => { const todoItem = { id:Math.floor(Math.random() * 10000), value:newTodo } if(todoItem){ setList([...list,todoItem]) setNewTodo('') } /*gets the oldlist and whats inside of it and adds the new item */ console.log(list) } useEffect(() => { localStorage.setItem("list", JSON.stringify(list)); }, [list]) useEffect(() => { const data = JSON.parse(localStorage.getItem('list')); if(data){ setList(data) } }, []) return ( <div className="input_container"> <form onSubmit={(e) => e.preventDefault()}> <input type="text" onChange={e => setNewTodo(e.target.value)} className="todo-input" placeholder="Write Todo.." value={newTodo} name="text"/> <button onClick={() => handleSubmit()} className="add-todo-button"> Add Todo </button> </form> <TodoList list={list} newTodo={newTodo}/> </div> ) } export default AddTodo
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Debe obtener la lista de tareas del almacenamiento local en su estado cuando crea el estado. Cada vez que la página se actualice, obtendrá el estado inicial del almacenamiento local. Si tuviera algo diferente, lo establecerá en [] así.

 const [newTodo, setNewTodo] = useState('') const [list, setList] = useState(JSON.parse(localStorage.getItem("list")) || [])

Esta es una mejor manera de hacerlo.

about 4 years ago · Juan Pablo Isaza Denunciar

0

La parte de abajo no es útil.

 useEffect(() => { localStorage.setItem("list", JSON.stringify(list)); }, [list])

Cuando se monta la página, establecerá localStorage como [] porque establece [] como valor predeterminado de la lista. Aquí está mi solución para ayudarte.

 const [list, setList] = useState(JSON.parse(localStorage.getItem("list")) || []) const handleSubmit = () => { const todoItem = { id:Math.floor(Math.random() * 10000), value:newTodo } if(todoItem){ setList([...list,todoItem]) setNewTodo('') } /*gets the oldlist and whats inside of it and adds the new item */ console.log(list) // Store the value in localStorage localStorage.setItem("list", JSON.stringify(list)); }

https://reactjs.org/docs/hooks-effect.html

Sería útil si pudieras echarle un vistazo al useEffect de nuevo

about 4 years ago · Juan Pablo Isaza Denunciar

0

Este efecto

 useEffect(() => { localStorage.setItem("list", JSON.stringify(list)); }, [list])

se ejecutará cada vez que se monte el componente. Lo que significa que tan pronto como se monte, el efecto se ejecutará y borrará el valor almacenado en localStorage.

Establecer su valor localStorage dentro de su controlador de eventos (es decir, handleSubmit) en lugar de usar un efecto es un enfoque mucho mejor aquí.

 const handleSubmit = () => { const todoItem = { id:Math.floor(Math.random() * 10000), value:newTodo } if(todoItem){ setList([...list,todoItem]) setNewTodo('') } /*gets the oldlist and whats inside of it and adds the new item */ console.log(list) // Store the value in localStorage localStorage.setItem("list", JSON.stringify(list)); }
about 4 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 Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda