我正在尝试创建一个功能,一个状态的分级电影在祖斯坦纳。
状态由一个对象数组组成,例如有两个条目:
ratedMovies: [
{ imdbID: "tt0076759", userRating: "5" },
{ imdbID: "tt0080684", userRating: "10" },
]下面是管理ratedMovies更改的函数。这是问题所在。我希望它检查具有相同imdbID的对象是否处于ratedMovies状态。如果是这样,则更新它的值,而不是使用相同的imdbID添加另一个对象,而是添加一个新的值。
如果我试图从上面的状态示例中更改其中一部电影的评级(在状态ofc中使用它们),我将得到If控制台检查,应用程序崩溃时会出现错误:TypeError: Cannot create property 'userRating' on number '0'。
如果状态是空的,或者我更改了其他电影的评级,我会得到“其他控制台”检查,但是它们仍然没有添加到状态中。
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]
}
})
}输入上的onChange函数可以对电影进行评级,创建一个与状态数组中相同的对象,并将其传递给管理ratedMovies状态的函数:
const changeUserMovieRating = (event) => {
const movieRating = {
imdbID: modalDetails.imdbID,
userRating: event.target.value,
}
console.log(movieRating)
addUserRating(movieRating)
}其产出如下:
{imdbID: 'tt0120915', userRating: '2'}我希望我解释清楚了一切,我将非常感谢任何关于如何解决这个问题的建议,谢谢!
发布于 2021-12-06 23:29:00
对不起,我在提出这个问题时的整个徒弟都没有意义,必须彻底地重新做工。
我决定在获取过程中不添加参数,因为在另一个组件中,可以获取相同的数据。因此,我决定将“userRating”的值保留在本地存储中,如果获取的电影曾经被“用户”评级过,则会显示该值。
https://stackoverflow.com/questions/69898225
复制相似问题