在 NextJS 中使用异步和 Cookies.get 的 useEffect

useEffect with async and Cookies.get in NextJS

我正在尝试获取使用效果中的 cookie 数据,然后使用该数据,我的组件如下所示..

const Favourites = (props) => {
  const [isClick, setClick] = useState(false);

  const activityId = props.activityId

  useEffect(() => {
    const favourites = Cookies.get('favourites')
    if (favourites[activityId] === true) {
      setClick(true)
    }
  })

  return (
    <>
      <div className="heart">
        <Heart isClick={isClick} onClick={() => setClick(!isClick)} />
      </div>

    </>
  );
}

这是我在 console.log(Cookies.get('favourites')) -

时得到的结果
{"5edf47240dcb4713d3942e1b":true,"5edf47240dcb4713d3942e2b":true,"5fa10bd8f70458050ffe68af":true}

改变

const favourites = Cookies.get('favourites')

const favourites = {"5edf47240dcb4713d3942e1b":true,"5edf47240dcb4713d3942e2b":true,"5fa10bd8f70458050ffe68af":true}

产生了预期的效果。

favorites 是使用 js-cookie 存储在本地存储中的 activityID 数组。它基本上是用户最喜欢的活动列表,如果他们喜欢 activity 并单击心脏按钮,那么 activityID 将存储为键并将值设置为 true

以上不起作用,如果收藏夹数组中的 activityId 为真,则 setClick 不会设置为真。如果我 console.log(Cookies.get('favourites')) 并将结果复制到 const favorites 然后它确实有效

根据您的编辑,console.log 显示的实际上是 string。因此,对 Cookies.get 返回的内容执行 JSON.decode 应该可以解决问题:

const favourites = JSON.decode(Cookies.get('favourites'));