Lautaro Strappazzon
Juan Castro
ProfesorGilbert Ardila
Guadalupe Monge Barale
Bramucci Candela
Daniel Quispe
Esteban Santiago Pizzani
Jesus Hurtado
Juan Castro
ProfesorAxel Enrique Galeed Gutierrez
Dario Paladines
Luis Paredes
Luis Fernando Egea
Jainelker Jesus Yepez
Luis Fernando Egea
Sergio Javier Lopez Olivera
Ricardo Alfonso Chavez Vilcapoma
Sergio Javier Lopez Olivera
John Orellana
Juan Castro
ProfesorDaniel Quispe
Axel Enrique Galeed Gutierrez
Juan David Moreno Rodriguez
Valentina Llorente Hernández
Néstor Raúl Guzmán Díaz
Néstor Raúl Guzmán Díaz
Ulqernesh Karvenae
Johnner Alexander Gambacica Ortiz
JuanDC: porfa recorta del minuto 3:45 al 3:52 que me equivoqué. Persona que hace la edición de las clases después de subir el video:
Reportanding... Solucionanding... Y chanqleteanding a las personas de QA... :sweat_smile:
Nooo, eso es lo que hace estos videos valiosos, los errores!!
Mis notas . localStorge funciona como un obj, pero no se borra la información cuando recargamos la página
setItem → guarda
localStore.setItem(’nombreClave’, ‘valor’)
getItem → leer
lo usamos en js para asignarlos a variables
removeItem → borra
No puede guardar objetos ni arrays. . Debemos stringifyar el json
JSON.stringify(likedMovies)
Parsearlo para manipularlo en js
JSON.parse(localStorage.getItem('liked_movies')
En el minuto 7:30, me parecería más fácil hacer algo como:
const likedMovies = JSON.parse(localStorage.getItem('liked_movies')) || {}
si, yo tambien lo hice de esa forma, me parece mejor
Para no tener que hacer el localStorage.removeItem('elemento') cada vez que quieran borrar algo del localStorage pueden desde las herramientas de desarrollador en Chrome, en la barra donde aparece Elements, Console y Network darle a las flechas y seleccionar Application. Ahí van a ver una opción de Local Storage que si le dan click derecho les da la opción para borrar todo el Local Storage de la página.
Este video no lo puedo descargar desde la app mobile, porfa arreglarlo, porque con lo lento de mi internet no puedo ver la clase :(
Reportado al equipo
Dejo un pequeño aporte. :D
Una forma de acortar el código en las funciones likeMovie y likedMoviesList es utilizando el operador ternario de la siguiente forma:
likedMovieList
Original
Mejorado
Código
const likedMovieList = () => { const ITEM = localStorage.getItem('liked-movie'); const MOVIES = (ITEM) ? JSON.parse(ITEM) : {}; return MOVIES; };
likeMovie
Original
Mejorado
Código
const likeMovie = (movie) => { const ID = movie.id; const LIKED_MOVIE_LIST = likedMovieList(); const IS_REPEAT = LIKED_MOVIE_LIST[ID]; LIKED_MOVIE_LIST[ID] = (IS_REPEAT) ? undefined : movie; const LIKED_MOVIE_LIST_STRING = JSON.stringify(LIKED_MOVIE_LIST); localStorage.setItem('liked-movie', LIKED_MOVIE_LIST_STRING); };
Supongo que la otra forma de agregar películas a favoritos es usando el endpoint de favorites de la API, y justo allí llega la dicotomía de si usar los llamados directamente a la API o usando localstorage.
aqui tengo mi solucion para que agregue y para que borre los favoritos
function likeMovie (movie) { const likedMovies = likedMovieList() if (likedMovies[movie.id]) { console.log("quitar") delete likedMovies[movie.id]; localStorage.setItem("liked_movies", JSON.stringify(likedMovies)) console.log(JSON.parse(localStorage.getItem("liked_movies"))) } else { console.log("agregar") likedMovies[movie.id] = movie localStorage.setItem("liked_movies", JSON.stringify(likedMovies)) console.log(JSON.parse(localStorage.getItem("liked_movies"))) } }
aparte hay un bug aqui cuando la pagina recarga pone los corazones morados aun cuando el el local storage ya estan agregadas a favoritos asi que hice una comprobacion el la funcion donde se le agregan las clases al btn para que le coloque la correspondiente
const movieBtn = document.createElement("button"); if (likedMovieList()[movie.id]) { movieBtn.classList.add("movie-btn--liked"); movieBtn.classList.add("movie-btn"); } else { movieBtn.classList.add("movie-btn"); } movieBtn.addEventListener("click", () => { movieBtn.classList.toggle("movie-btn--liked"); likeMovie(movie); });
No puedo ver el video, dice que es error del servidor o de mi red, pero todos los demas si los puedo ver. Probe con una solucion que vi en otra pregunta de cambiar de servidor pero solo me aparece disponible el c, por lo que no lo puedo cambiar . Tambien probe en otros navegadores y me da el mismo error :(
Hola Luis. Estuve revisando el contenido y todo parece ir sin problemas, ¿has intentado borrar el caché del equipo?
Hola! Si, probe borrando cachè, probe en incognito, pero no consigo solucionarlo.
18:49 . No estamos enviando el objeto en forma de string al localStorage y tampoco le asignamos una key
Ví el vídeo e intente replicarlo luego pero sin éxito :(...y eso que lo estoy haciendo apenas me levanté con la mente despejada :(...¿algún consejo que permita entender mejor la lógica?
Hola Ricardo, he estado exactamente en la misma posición en la que te encuentras tú infinidad de veces. Lo que hago es que reduzco al máximo la lógica que implementa el profesor. . Es decir, reduzco el problema a pasos simples y muy muy sencillos, que puedo implementar en un espacio de "entrenamiento" o "experimento". Básicamente aíslo el problema. Así he podido resolver problemas complejos. . Y además, resolver problemas de lógica, ejercicios de programación donde se trate más de resolver un problema per sé en vez de implementar algo en una aplicación.
JSON.stringify y JSON.parse no saben trabajar con métodos así que simplemente los ignoran y no los parsean o stringyfea🤔
Yep, pero no necesitas guardar métodos en Local Storage... ¿o sí?
Para baciar el localStorage facilmente puedes usar esta extension en Chrome Clear Cache
Dejo mi pequeño aporte. :D
Para los que están confundidos como yo preguntándose «¿cómo es que se borra la película? En ningún momento utilizamos algo para borrarla»
La respeta es que si, si estamos usando código para poder borrar la película de local storage. Lo hacemos utilizando el método statico JSON.stringifly(), cuando convierte el objeto en un string y unos de los valores del mismo es undefined la key es ignorada.
Ejemplo
const PERSON = { name: 'Galeed', age: undefined }; const PERSON_STRING = JSON.stringify(PERSON); console.log(PERSON_STRING); // Resultado // {"name":"Galeed"}
chimba de clase!
Mi aporte, esta fue la manera en que defini las funciones.
function likedMoviesList(){ const item = localStorage.getItem('liked_movies'); return item ? JSON.parse(item) : {}; } function likeMovie(movie) { // movie.id if (!movie || !movie.id) { console.error('El objeto movie es inválido o no tiene un id'); return; } console.log(movie); const likedMovies = likedMoviesList(); console.log("Peliculas guardadas", likedMovies); if (likedMovies[movie.id]) { delete likedMovies[movie.id]; } else { likedMovies[movie.id] = movie; } localStorage.setItem('liked_movies', JSON.stringify(likedMovies)); } ```Dentro de la funcion createMovies fue lo siguiente: ```js // Primera parte del codigo... //... const movieBtns = container.querySelectorAll('[data-favorite-btn]'); movieBtns.forEach(movieBtn =>{ const movieId = movieBtn.getAttribute('data-favorite-btn'); const movie = movies.find(m => m.id == movieId); movieBtn.addEventListener('click', (e) =>{ e.stopPropagation(); e.stopImmediatePropagation(); movieBtn.classList.toggle('movie-btn--liked'); likeMovie(movie); }); }); //LazyLoad ...
function favoritesMoviesList () { return JSON.parse(localStorage.getItem('liked_movies')); } function saveFavoriteMovie(movie) { const listMovies = favoritesMoviesList(); if(listMovies.length > 0 && listMovies.find( item => item.id === movie.id)) { const arr = listMovies.findIndex(item => item.id === movie.id) console.log(arr) favoriteMovies.splice(arr, 1) } else { favoriteMovies.push(movie) } localStorage.setItem('liked_movies', JSON.stringify(favoriteMovies)); getFavoritesPreview(); } ```Al intentarlo hacer por mi cuenta yo cree un array vacio donde lo llenaba con push al agregar favoritos de estamanera queda en el orden que los voy agregando, cosa que no vi en el ejemplo del profe, no se que tanto afecet el rendimiento. function favoritesMoviesList () { return JSON.parse(localStorage.getItem('liked\_movies'));} function saveFavoriteMovie(*movie*) { const listMovies = favoritesMoviesList(); if(listMovies.length > 0 && listMovies.find( *item* => *item*.id === *movie*.id)) { const arr = listMovies.findIndex(*item* => *item*.id === *movie*.id) console.log(arr) favoriteMovies.splice(arr, 1) } else { favoriteMovies.push(*movie*) } localStorage.setItem('liked\_movies', JSON.stringify(favoriteMovies)); getFavoritesPreview();}
Intenet hacerlo por mi cuenta y creo que me alargue un poco mas, abierto a observaciones si es una buena solucion o me complique:
function favoritesMoviesList () { return JSON.parse(localStorage.getItem('liked_movies'));}
function saveFavoriteMovie(``movie``) { const listMovies = favoritesMoviesList();
if(listMovies.length > 0 && listMovies.find( ``item`` => ``item``.id === ``movie``.id)) { const arr = listMovies.findIndex(``item`` => ``item``.id === ``movie``.id) favoriteMovies.splice(arr, 1) } else { favoriteMovies.push(``movie``) } localStorage.setItem('liked_movies', JSON.stringify(favoriteMovies)); getFavoritesPreview();}
Esta es la forma que se me ocurre min 17:00const likedFilmsList = () => { const item = localStorage.getItem('likedFilm') return item ? localStorage.getItem('likedFilm') : '{}'} const likeFilm = (movie) => { const likedFilms = JSON.parse(likedFilmsList()) if (likedFilms[movie.id]) { delete likedFilms[movie.id] localStorage.setItem('likedFilm' , JSON.stringify(likedFilms)) } else { likedFilms[movie.id] = movie localStorage.setItem('likedFilm' , JSON.stringify(likedFilms)) }} export { likeFilm }
const likedFilmsList = () => { const item = localStorage.getItem('likedFilm') return item ? localStorage.getItem('likedFilm') : '{}' } const likeFilm = (movie) => { const likedFilms = JSON.parse(likedFilmsList()) if (likedFilms[movie.id]) { delete likedFilms[movie.id] localStorage.setItem('likedFilm' , JSON.stringify(likedFilms)) } else { likedFilms[movie.id] = movie localStorage.setItem('likedFilm' , JSON.stringify(likedFilms)) } } export { likeFilm } ```Convertir los datos a JSON borrarlos o agregarlos y pasárselos de nuevo
localStorage.clear()