Vyhledávání na webu

reactjs - Přidání hodnot do pole uvnitř objektu ve stavu Zustand


Ukládám uživatelský objekt do stavu v Zustand a obsahuje pole s seznamem oblíbených filmů uživatele (prázdný zástupce je nahrazen po přihlášení). Nicméně, z nějakého důvodu Zustand není schopen uživatelský objekt rozpoznat a tvrdí, že neexistuje, když se ho snažím použít ve funkci setFavoriteMovie. Přitom je jasně vidět, že tam je, jak je ukázáno v kódu níže. Co dělám špatně? Jakákoliv pomoc je oceněna.

import { create } from "zustand";
import { UserObject } from "../pages/login";

interface Store {
  user: UserObject;
  setUser: (data: any) => void;
  setFavoriteMovie: (id: number) => any;
}

const emptyUserObject = {
  username: "",
  email: "",
  name: "",
  favoriteMovies: [],
};

const userStore = create<Store>((set, get) => ({
  user: emptyUserObject,
  setUser: (data: UserObject) => {
    set(() => ({ user: data }));
  },
  setFavoriteMovie: (id: number) => {
    set((state) => ({
      user.favoriteMovies: [...state.user.favoriteMovies, id],
    })),
  }
}));

Odpověď č. 1

Budete muset explicitně sloučit vnořené vlastnosti uživatele pomocí operátoru spread:

...
const userStore = create<Store>((set, get) => ({
 ...
 setFavoriteMovie: (id: number) => {
    set((state) => ({
      user: {
        ...state.user,
        favoriteMovies: [...state.user.favoriteMovies, id]
      }
    }))
  },
}));

Více informací naleznete v dokumentaci Zustand pro vnořené objekty.

Související články