Asynchroniczne wyświetlanie danych

0

Cześć, w projekcie, który sobie piszę we Vue, mam komponent, w którym na created() pobieram i wyświetlam dane z api w postaci v-card, gdzie znajdują się dwa buttony: accept i reject, które również są podpięte pod endpointy i kliknięcie któregoś z nich sprawia, że ten element zostaje usunięty z listy, którą pobieram (tą na created). Chciałbym, żeby po kliknięciu w jakikolwiek przycisk przeładowała mi się templatka i wyświetlone zostały uaktualnione dane z api, jednak nie bardzo wiem jak się za to zabrać, computed działa synchronicznie, także raczej odpada. Jakieś pomysły?

1

Dlaczego nie zrobisz zwyczajnej metody?

/* ... */

data() {
  return {
    isRefreshing: false,
    foo: 'hehe',
    bar: 'hoho',
  };
},

methods: {
  async refresh() { // tę metodę możesz normalnie uruchomić z dowolnego kontekstu, np.: v-on:click="refresh"
    this.isRefreshing = true; // jeśli chcesz w międzyczasie np. pokazać jakiś loader

    const newData = await fetch(...);

    this.foo = newData.foo;
    this.bar = newData.bar;

    this.isRefreshing = false;
  },
},

/* ... */
0
Patryk27 napisał(a):

Dlaczego nie zrobisz zwyczajnej metody?

/* ... */

data() {
  return {
    isRefreshing: false,
    foo: 'hehe',
    bar: 'hoho',
  };
},

methods: {
  async refresh() { // tę metodę możesz normalnie uruchomić z dowolnego kontekstu, np.: v-on:click="refresh"
    this.isRefreshing = true; // jeśli chcesz w międzyczasie np. pokazać jakiś loader

    const newData = await fetch(...);

    this.foo = newData.foo;
    this.bar = newData.bar;

    this.isRefreshing = false;
  },
},

/* ... */

Zrobiłem w bardzo podobny sposób, ale nie zauważyłem, że metoda odświeżająca po zaakceptowaniu lub odrzuceniu nie znajdowała się w metodach i mi logowało błąd. Głupia pomyłka. Dzięki za pomoc anyway!

1 użytkowników online, w tym zalogowanych: 0, gości: 1