Estoy tratando de crear una función para un estado de películas calificadas en Zustand.
El estado consta de una matriz de objetos, ejemplo con dos entradas:
ratedMovies: [ { imdbID: "tt0076759", userRating: "5" }, { imdbID: "tt0080684", userRating: "10" }, ]A continuación se muestra la función que gestiona los cambios de ratingMovies. Aquí es donde radica el problema. Quiero que verifique si un objeto con el mismo imdbID está presente en el estado de ratingMovies. Y si es así para actualizar el valor del mismo, en lugar de agregar otro objeto con el mismo imdbID pero con un nuevo valor.
Si trato de cambiar la calificación de una de las películas del ejemplo de estado anterior (con ellas en el estado ofc), obtengo la verificación de la consola IF y la aplicación falla con el error: TypeError: Cannot create property 'userRating' on number '0'
Si el estado está vacío o cambio la calificación de otras películas, obtengo la verificación de la consola ELSE, pero aún no se agregan al estado.
addUserRating: (rating) => { console.log("rating object", rating) set((state) => { if (state.ratedMovies.find((movie) => movie.imdbID === rating.imdbID)) { console.log("add rating IF") let index = state.ratedMovies.findIndex( (movie) => movie.imdbID === rating.imdbID ) index.userRating = rating.userRating return [index, ...state.ratedMovies] } else { console.log("add rating ELSE") return [rating, ...state.ratedMovies] } }) }la función onChange en la entrada donde se puede calificar una película crea un objeto idéntico al de la matriz de estado y lo pasa a la función que administra el estado de las películas calificadas:
const changeUserMovieRating = (event) => { const movieRating = { imdbID: modalDetails.imdbID, userRating: event.target.value, } console.log(movieRating) addUserRating(movieRating) }cuya salida es:
{imdbID: 'tt0120915', userRating: '2'}Espero haber explicado todo claramente, y agradeceré mucho cualquier consejo sobre cómo resolver este problema, ¡gracias de antemano!
Lo siento, pero todo este enfoque que tenía al momento de hacer esta pregunta no tenía sentido y tuvo que ser reelaborado por completo.
Decidí no agregar el parámetro durante la recuperación, ya que en otro componente se podrían recuperar los mismos datos. Así que decidí mantener el valor de 'userRating' en el almacenamiento local y si la película recuperada ya había sido calificada una vez por el 'usuario', se mostraría el valor.