【问题标题】:Zustand: change value of parameter in stored objectzustand:更改存储对象中的参数值
【发布时间】:2021-11-09 12:34:06
【问题描述】:

我正在尝试为 Zusand 中的分级电影状态创建一个函数。

状态由一个对象数组组成,例如有两个条目:

  ratedMovies: [
    { imdbID: "tt0076759", userRating: "5" },
    { imdbID: "tt0080684", userRating: "10" },
  ]

以下是管理ratedMovies 更改的功能。这就是问题所在。我希望它检查在ratedMovies 状态下是否存在具有相同 imdbID 的对象。如果是这样更新它的值,而不是添加另一个具有相同 imdbID 但新值的对象。

如果我尝试从上述状态示例更改其中一部电影的评级(它们处于 c 状态),我会收到 IF 控制台检查,并且应用程序崩溃并出现以下错误: TypeError: Cannot create property 'userRating' on number '0'

如果状态为空或者我更改了其他电影的评分,我会得到 ELSE 控制台检查,但它们仍然没有添加到状态中。

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'}

我希望我能清楚地解释一切,我将非常感谢任何有关如何解决此问题的提示,在此先感谢!

【问题讨论】:

    标签: javascript reactjs zustand


    【解决方案1】:

    抱歉,我提出这个问题时的整个方法毫无意义,必须完全重新设计。

    我决定在获取过程中不添加参数,因为在另一个组件中可以获取相同的数据。所以我决定将 'userRating' 的值保留在本地存储中,如果获取的电影已经被 'user' 评级过一次,则将显示该值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-16
      • 1970-01-01
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      相关资源
      最近更新 更多