Nuxt.js専用のモジュールのcookie-universal-nuxtを使用
Nuxt.js用のCookieを扱うためのモジュールがあるので、こちらを利用します。
導入
対象のプロジェクト下で
yarn add cookie-universal-nuxt
or
npm install --save cookie-universal-nuxt
nuxt.config.jsの設定
modules: [
['cookie-universal-nuxt', { parseJSON: false }]
],
これで設定は完了
取得するデータをキャッシュに保持(set)
今回は取得するデータがあるページへアクセスしたら、キャッシュに記録されるというもの
export default {
created() {
const setCached =
{
title: 'こんにちは!タイトルをキャッシュします',
content: 'こんにちは!内容をキャッシュします。'
}
this.$cookies.set('article01', setCached, {
path: '/',
maxAge: 60 * 60 * 24 * 7
})
}
}
setCachedにページ内のデータをセットする。
今回は直接入力しているが、apiから取得したデータ等をセットしたり、dataプロパティと紐づけてもよい
this.$cookie.setでクッキーに入るNameをarticle01に指定し、valueをセットする。
cookieを保持するpathと時間を指定する
これでcookieにセットされます。
cookieに保持されているデータを取得(get)
今度は違うページで取得できるようにしてみる。
export default {
data () {
return {
article01: this.$cookies.get('article01')
}
},
computed: {
article() {
let post
if (this.article01) {
post = JSON.parse(this.article01)
}
return post
}
}
}
取得したいページのdataプロパティへgetした値をセットする
this.$cookie.get('CookieにセットしたName')で値が取得できる
先ほどオブジェクトでValueをセットしたので、parseしてデータを扱えるようにする。
<template>
<div>
<article v-if="article">
<h1>{{ article.title }}</h1>
<p>{{ article.content }}</p>
</article>
</div>
</template>
あとはデータがないときには表示されないようにv-ifを設定し、
値を表示する
これでデータをCookieへsetしgetするまでができるようになります。
値は配列にしてもいいし、そのままStringでわたしてもいいし、それぞれ使いやすい形式でいれてください
まとめ
cookie周りの設定が結構簡単にできるので、導入しやすいと思います。
あとはデータの取得周りでエラーがでないように条件分岐等を使っていくといいかなと思います。
数を指定して例えば3つとかを閲覧したページ順に入れつつ更新とかもできるので、直近の閲覧履歴とかデータベースにいれなくても履歴にのこすこともできる点がいいと思った。