前置き
お試しAPIのJSONplaceholderを使って
遊んでみましょう⚡️🎸
タイトルを表示させ、
クリックでidに合わせた
動的リンクを行います🌟
データはこちらを使用します💡
https://jsonplaceholder.typicode.com/posts
axios
, asyncData
, nuxt-link
などなど
復習できることが沢山😉❤️
できるところはやる必要がないので
ドンドン飛ばしてくださいね✈️⛅️
なんだっけこれ…🤦♂️
という方は過去の解説記事をご覧ください👀
【Nuxt.js】axios導入編:かんたん・お手軽API通信
https://wp.me/pc9NHC-gr
【Nuxt.js】Nuxt文法編:非同期通信やasyncDataの使い方
https://wp.me/pc9NHC-192
Let's try!
Step1: axiosでデータを取得
まずはaxios
を使って
データを取得しましょう📥
データの取得さえできれば良いのでul>li
にせず{{ articles }}
で
簡単に書いてみましょう…!
axios
をインストールします。
terminal
$ npm install --save @nuxtjs/axios
ではコードを書いてみましょう!
ticktack…
できましたか?💡
コードを見ていきましょう!
コード
正解コード①
axios
でget
するだけですね💡Promise
が必要な非同期通信になるのでasyncData()
内に記載します✍️console
でres
やres.data
を表示しても良いですね😄
) pages
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<template> <p>{{ articles }}</p> </template> <script> import axios from 'axios' export default { asyncData () { return axios.get('https://jsonplaceholder.typicode.com/posts') .then((res) => { return { articles: res.data } }) }, } </script> |
正解コード②
.then
の代わりにasync/await
を使っても
もちろんOKです⭕🙆♀️
) pages
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<template> <p>{{ articles }}</p> </template> <script> import axios from 'axios' export default { async asyncData () { const res = await axios.get('https://jsonplaceholder.typicode.com/posts') return { articles: res.data } }, } </script> |
正解コード③
ayncData()
を使わずにcreated()
を使うパターンです。created()
はthisコンテキスト
で
そのままget
してきた物を
代入することができちゃいます。
とはいっても意味的にはasyncData()
の方が適切です!
なるべく使わないようにしましょう❗️😵
created()についてはこちら
https://wp.me/pc9NHC-z1
) pages
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<template> <p>{{ articles }}</p> </template> <script> import axios from 'axios' export default { data () { return { articles: [], } }, created () { axios.get('https://jsonplaceholder.typicode.com/posts') .then((res) => { this.articles = res }) }, } </script> |
.then(Promise)を使わない場合
Promise
使ってね!となり
うまくデータが表示できません😖💦
) pages
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<template> <p>{{ articles }}</p> </template> <script> import axios from 'axios' export default { created () { this.articles = axios.get('https://jsonplaceholder.typicode.com/posts') console.log(this.articles) }, } </script> |
出た〜!Promise
!💥👻
うわーなんだっけこれ!!!
という方は…
こちらの記事をご覧ください👀
【Nuxt.js】Nuxt文法編:非同期通信やasyncDataの使い方
https://wp.me/pc9NHC-192
Step2: ul>liで見た目を整える
取得したdataのtitleのみを
liで表示させましょう🌟
dataは直接
JSONplaceholderを見ても良いし
consoleでres.dataを表示させてもOK♪
https://jsonplaceholder.typicode.com/posts
ではコードを書いてみましょう!
ticktack…
できましたか?
コードはこちら!
コード
articles
の配列1つ1つをarticle
と名付け、
その中のtitle
のみを表示させています。
【Nuxt.js】Nuxt文法編:v-for
https://wp.me/pc9NHC-iQ
) pages
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<template> <ul class="ul"> <li v-for="(article, index) in articles" :key="index" > {{ article.title }} </li> </ul> </template> <script> import axios from 'axios' export default { async asyncData () { const res = await axios.get('https://jsonplaceholder.typicode.com/posts') console.log(res.data) return { articles: res.data } }, } </script> |
Step3: nuxt-linkで動的リンクを作る
res.data
のid
と
同じparams
にリンクさせましょう🎈🧸
飛んだ先ではid
を表示させましょう🌟
urlは/aritcle/{id}とします。id
部分は取得したデータ(articles
)の
配列article
の中のid
なのでarticle.id
となりますね。
ではコードを書いてみましょう!
ticktack…
できましたか?
ディレクトリ とコードを見ていきましょう!
ディレクトリ
リンク先を/article/{id}にするため
このようなファイル構成になります。
directory
pages/
--| article/
----| _id.vue
--| index.vue
コード
to
は:to
にしないと
文字列になってしまいます。
http://localhost:3000/'/article/'%20+%20article.id
article
は文字列で良いので''で囲みarticle.id
と連結させます。
【Nuxt.js】Vue Router基礎編:params, queryを使ってページ遷移
https://wp.me/pc9NHC-eI
) pages
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<template> <ul class="ul"> <li v-for="(article, index) in articles" :key="index" > <nuxt-link :to="'/article/' + article.id"> {{ article.title }} </nuxt-link> </li> </ul> </template> <script> import axios from 'axios' export default { async asyncData () { const res = await axios.get('https://jsonplaceholder.typicode.com/posts') console.log(res) return { articles: res.data } }, } </script> |
) pages
1 2 3 |
<template> <p>params: {{ $route.params.id }}</p> </template> |
完成です🤗 🎉🎀
まとめ
いかがでしたか?🌷
Step1の短いコードだけでも
意外と基礎知識の情報量が多いな…🤔
と思った方もいると思います。
基礎をしっかり身につけることの
重要さが分かりますね💡
このブログでは今後も
基礎知識を分かりやすく解説します✨💪