...is not a function

...is not a function
Nindzia
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:255
0

Piszę apkę, w której pobieram dane z api i wyświetlam je, używam do tego vuex, na stronie wyświetlam pasek wyszukiwania z metodą:

Kopiuj
<div class="panel panel-default">
        <input
                class="form-control"
                type="text"
                placeholder="Search"
                aria-label="Search"
                v-model="filterText">
        <div class="panel-body records"
             v-for="record in filterData"
             >
            <p>{{record.name}}</p>
            <img :src="record.img" alt="">
        </div>
    </div>

<script>
    import { mapGetters } from 'vuex'
    export default {
        data() {
            return {
                job: '',
                artistData: '',
                img: '',
                filterText: '',
            }
        },
        created() {
          this.$store.dispatch('fetchAlbums');       // pobieranie z api, commit na zapis do state
        },
        computed: {
            ...mapGetters([
                'getData',
            ]),
            filterData() {
                return this.getData.filter((element) => {
                    return (element.name.match(this.filterText));
                });
            }
        },
    }
</script>

Na początku wszystko działało jak należy, potem w konsoli logował się błąd:

[Vue warn]: Error in render: "TypeError: this.getData.filter is not a function"

Już sam nie wiem co mam z tym zrobić, bo działa jak chce :D

AN
  • Rejestracja:prawie 11 lat
  • Ostatnio:5 dni
  • Postów:973
0

A nie powinno być przypadkiem getData().filter?


Zdalna praca dla Senior Python Developerów --> PW
Nindzia
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:255
0
anonimowy napisał(a):

A nie powinno być przypadkiem getData().filter?

Sprawdzałem, nadal to samo

Nindzia
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:255
0

Za pierwszym razem działa, po odświeżeniu wywala błąd

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10078
0
anonimowy napisał(a):

A nie powinno być przypadkiem getData().filter?

Nie powinno, bo getData to computed property.

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10078
1
Nindzia napisał(a):

Na początku wszystko działało jak należy, potem w konsoli logował się błąd:

[Vue warn]: Error in render: "TypeError: this.getData.filter is not a function"

Już sam nie wiem co mam z tym zrobić, bo działa jak chce :D

Jesteś pewien że getter getData zwraca array zawsze? Dopisz sobie w kodzie słówko debugger; (jeśli umiesz korzystać z debuggera) lub po prostu wstaw console.log(this.getData) i upewnij się że to jest array.

edytowany 1x, ostatnio: Riddle
Nindzia
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:255
0
TomRiddle napisał(a):
Nindzia napisał(a):

Na początku wszystko działało jak należy, potem w konsoli logował się błąd:

[Vue warn]: Error in render: "TypeError: this.getData.filter is not a function"

Już sam nie wiem co mam z tym zrobić, bo działa jak chce :D

Jesteś pewien że getter getData zwraca array zawsze? Dopisz sobie w kodzie słówko debugger; (jeśli umiesz korzystać z debuggera) lub po prostu wstaw console.log(this.getData) i upewnij się że to jest array.

Tak, to tablica obiektów

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10078
0
Nindzia napisał(a):

Tak, to tablica obiektów

W obu przypadkach? Bo wiesz, tablice mają funkcję filter(), więc to co się znajduję pod this.getData raczej nie może być arrayem, skoro dostajesz this.getData.filter is not a function.

Nindzia
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:255
0
TomRiddle napisał(a):
Nindzia napisał(a):

Tak, to tablica obiektów

W obu przypadkach? Bo wiesz, tablice mają funkcję filter(), więc to co się znajduję pod this.getData raczej nie może być arrayem, skoro dostajesz this.getData.filter is not a function.

Sprawdzę jeszcze raz jak będę w domu

Silv
Moderator Wiki
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Warszawa
0

Jeżeli getData okaże się tablicą (ale dlaczego miałoby mieć nazwę jak funkcja?), możesz jeszcze zobaczyć, czy this jest odpowiednie. Nie używałem Vue, ale wiem tyle, że this może mieć najróżniejsze wartości w zależności od kilku kryteriów.


Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10078
0
Silv napisał(a):

Jeżeli getData okaże się tablicą (ale dlaczego miałoby mieć nazwę jak funkcja?)

Bo to jest funkcja - funkcja która zwraca tablicę.

Silv
Wywoływana jakoś przez Vue, jak rozumiem?
Riddle
@Silv: nie, przez programistę.
Silv
No, to w powyższym kodzie nie widzę tego wywołania.
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10078
0
Silv napisał(a):

No, to w powyższym kodzie nie widzę tego wywołania.

Screenshot_20190624-163821.png

Silv
Moderator Wiki
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Warszawa
0

@TomRiddle: w jakim sensie to jest wywołanie metody getData?


edytowany 1x, ostatnio: Silv
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10078
0
Silv napisał(a):

@TomRiddle: w jakim sensie to jest wywołanie metody getData?

https://lmgtfy.com/?q=vue+computed+property

Silv
Robi to Vue, OK.
Nindzia
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:255
0

Rozwiązałem problem, okazało się, że w Vuex do tablicy wpisywałem za każdym razem nową tablicę zamiast obiektu. Dzięki za pomoc!

Silv
A, czyli Vuex to jeszcze coś innego. Ech. :)
Silv
PS. @Nindzia możesz oznaczyć własną odpowiedź jako zaakceptowaną.
kult
  • Rejestracja:prawie 22 lata
  • Ostatnio:ponad rok
0

@Silv: > Robi to Vue, OK.
To zwykły getter z >=ES6

Kopiuj
class Test {
  // ...
  get getData() {
    return this.data;
  }
}
Silv
Hm... zapomniałem, że to taka dziwna składnia. Dzięki!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.