@zzmaster

Почему store в nest js не устанавливает полученные данные?

Код store

export interface TrackDomain {
    id: number,
    domain: string
}

export interface Tracklink {
    id: number,
    site: string,
    site_id: number,
    source_name: string,
    source_alias: string,
    source_id: number,
    link: string,
    created_at: string
} 


export interface TrackingStore {
    tracklinks: Tracklink[]
    trackDomains: TrackDomain[]
    isTracklinksFetching: boolean
    isTrackDomainsFetching: boolean
    start: () => void
    getTrackDomains: () => Promise<TrackDomain[] | undefined>

}

export const useTrackingStore = create<TrackingStore>()(
    devtools(
        (set: (state: State<TrackingStore>) => void) => ({
        tracklinks: [],
        trackDomains: [],
        isTrackDomainsFetching: false,

        start: () => {

            set({isTrackDomainsFetching: true})
        },

        getTrackDomains: async () : Promise<TrackDomain[] | undefined> => {
            const { token } = useAuthStore.getState();
            set({ isTrackDomainsFetching: true });

            try {
                const { data } = await axios.get<TrackDomain[] | undefined>(`${apiUrl}/settings/track-domains`, {
                  timeout: 900000000,
                  headers: {
                    Authorization: `Bearer ${token}`,
                  },
                })
                console.log(data); // <<<<<< здесь данные есть
                set({ trackDomains: data });
                return data;
            } catch (e) {
                console.log(e)
            } finally {
                set({ isTrackDomainsFetching: false })
            }
            return [];
        },

    })
))


В компоненте я хочу установть в селект перый полученный track домен.

useEffect(() => {
        const fetchData = async () => {
            trackingStore.start();
            if (trackingStore.trackDomains.length === 0) {
                const data = await trackingStore.getTrackDomains();
                console.log(data, trackingStore.trackDomains)
                if (trackingStore && trackingStore.trackDomains.length > 0) {
                    setTracker(trackingStore.trackDomains[0].domain + '/');
                    setValue('trackDomain_id', JSON.stringify(trackingStore.trackDomains[0]));
                }            
            }
        }
    
        if (trackingStore.trackDomains.length === 0) {
            fetchData();
        }
    }, []);


В функции getTrackDomains данные печатаются в консоль, а в useEffect - печатает
data = данные, trackingStore.trackDomains = []
Почему так? Я предположил, что set асинхронный, и поставил там await, но это не помогло.
  • Вопрос задан
  • 39 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы