Yo he encontrado un error.
.
Resulta que la aplicación cada vez que damos click en los botones de añadir un TODO o editar un TODO, hace uso del custom hook useTodos() y este a su vez hace uso del custom hook useLocalStorage() (y como sabemos este es síncrono, requiere de tiempo).
.
Entonces cada vez que accedemos a las rutas /new
o /edit/
debemos esperar que carguen los todos del localStorage nuevamente porque los necesitamos para las funciones addTodo()
y editTodo()
y aquí es donde está el problema.
.
Si modificamos el setTimeout()
de useLocalStorage()
a 5 segundos por ejemplo y luego accedemos a /new
o /edit
y agregamos o editamos información antes de que pasen 5 segundos habrá problemas.
- En el caso de
addTodo()
se sobrescribirá la información, porque la constantenewTodos
va a ser igual a un arreglo vacío. - En el caso de
editTodo()
se romperá la aplicación, porque la constantetodoIndex
va a ser -1.
.
Para solucionar esto lo que hice fue deshabilitar el <textarea> y el botón de Añadir/Editar usando el state
loading
de useTodos()
- En
newTodoPage()
yEditTodoPage()
agregue lo siguiente:
//use el loading y se lo pase al <TodoForm />
const { editTodo, getTodo, loading } = useTodos()
return (
<TodoForm
loading={loading}
...
...
)
- En
TodoForm()
agregue lo siguiente:
function TodoForm(props) {
...
...
return (
...
<textarea
disabled={props.loading}
...
/>
<button
disabled={props.loading}
>
{props.submitText}
</button>
)
}
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?