APIで取得したデータを使ってcomutedでページネーションのための処理を記述しようとしたところ、データがうまく使えない状態です。
解決したい内容
APIを使って取得し格納したデータの内容の確認方法
VuejsでTwitchAPIを使ってゲーム配信のデータを取得し表示するランキングアプリを作っています。
以下記述でTwitchAPIで取得したデータをstreamsに格納し、表示させることはできました。
vuejs
1 2export default { 3 name: 'getstream', 4 data() { 5 return { 6 streams: [], // APIから取得したデータ 7 } 8 }, 9 mounted() { 10 axios 11 .get("https://api.twitch.tv/kraken/streams/?language=ja&limit=20", {headers: headers}) 12 .then((response) => this.streams = response.data.streams) 13 .catch(error => console.log(error)) 14 }, 15}
次に以下のようにページネーションのためにこのデータを使った処理をcomputedに記述したところでエラーがでました。
vuejs
1export default { 2 name: 'getstream', 3 data() { 4 return { 5 streams: [], // APIから取得したデータ 6 parPage: 10, // 1ページに表示するデータ件数 7 currentPage: 1, // 現在の表示ページ 8 page: [], // ページ数 9 } 10 }, 11 mounted() { 12 axios 13 .get("https://api.twitch.tv/kraken/streams/?language=ja&limit=20", {headers: headers}) 14 .then((response) => this.streams = response.data.streams) 15 .catch(error => console.log(error)) 16 }, 17 18 methods: { 19 // 取得したデータ数に応じてページ数を設定 20 setPages() { 21 let numberOfPages = Math.ceil(this.streams.length / this.parPage); //全データ数/1ページに表示するデータ数 22 for ( let index = 1; index <= numberOfPages; index++) { 23 this.pages.push(index); 24 } 25 }, 26 }, 27 computed: { 28 // ページ番号にあわせてテストデータを抽出 29 paginate(streams) { 30 let page = this.page; //ページ数 31 let perPage = this.perPage; //1ページに表示されているデータ数 32 let from = page * perPage - perPage; //ページ数-1までに表示されるデータ数 33 let to = page * perPage; //1ページに表示されるデータ数 34 return streams.slice(from, to); 35 // 1ページ目ならfrom=0 to=10 で0~10までのデータを取得する 36 // 2ページ目ならfrom=10 to=20 で10~20までのデータを取得する 37 }, 38 // 表示するデータを抽出 39 displayStreams() { 40 return this.paginate(this.streams); 41 } 42 } 43}
error
1TypeError: streams.slice is not a function
streamsが配列でないため、sliceできないエラーかと思い、console.log(streams)でデータ内容を確認しようとしました。
出力結果がundifinedとなりデータが格納されているはずなのに表示されませんでした。
axiosの処理の部分でconsole.logを使うとstreamの中身が表示できていたため、データ自体は取得はできていると思います。
mounted内の処理で取得したデータはdata(){}で定義した変数に格納されていると思っているのですが、違うのでしょうか。
vuejs自体もAPIを使ったデータ取得も経験がなく、手詰まりとなってしまいました。
ヒントとなりそうなことであればどんなことでも構いませんので、ご回答いただけると幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/01 23:10