Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Nuxt の Store 永続化の話
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Yamaguchi Takahiro
May 24, 2019
Technology
1.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Nuxt の Store 永続化の話
Yamaguchi Takahiro
May 24, 2019
More Decks by Yamaguchi Takahiro
See All by Yamaguchi Takahiro
関西Kaggler会_不確実性最適化ゲーム入門
nyk510
1
670
コンペを気楽に開催しよーぜ!@関西Kaggler会
nyk510
0
1.4k
Django のセキュリティリリースを見る
nyk510
0
130
3分でMLアプリを作る 〜推論コードにちょっとのStreamlitを添えて〜
nyk510
1
1.2k
硬派で真面目なグラフを描く
nyk510
0
570
CORSをちゃんと理解する atmaバックエンド勉強会#4
nyk510
0
460
pythonで気軽にパッケージを作るのは良いという話。
nyk510
14
9.9k
RestAPIのページネーション atma バックエンド勉強会 #3
nyk510
1
1.1k
AWS CPU Credit を完全に理解する
nyk510
0
510
Other Decks in Technology
See All in Technology
2026TECHFRESH畢業分享會 - 原生還是跨平台? App 開發踩坑實錄
line_developers_tw
PRO
0
760
SONiC Scale-Up Working Group から探る Scale-UpやUltraEthernet機能の実装方法
ebiken
PRO
0
100
非定型業務をAI slackbotで自動化する ~ 社内要望を自動壁打ちするbotを作った ~/automating-ad-hoc-work-with-ai-slackbot
shibayu36
0
590
RSA暗号を手計算したくなること、ありますよね?? (20260615_orestudy6_rsa)
thousanda
0
200
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.5k
Claude Code の Sandbox 機能を Anthropic Sandbox Runtime(srt) で試そう!/lets-play-anthropic-sandbox-runtime
tomoki10
1
530
RAG を使わないという選択肢
tatsutaka
1
170
「速く作る」から「正しく作る」へ ─ 生成AI時代の開発フロー改革の ロードマップと実行 ─
starfish719
0
9.8k
AGENTS.mdとSkillsで始めるAIエージェント活用
sonoda_mj
2
190
AIっぽい文章を採点して人間らしく直すアプリを作ってみた
yama3133
2
120
手塩にかけりゃいいってもんじゃない
ming_ayami
0
250
チームで進めるAI駆動アジャイル×ウォーターフォール
kumaiu
0
150
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
55
10k
Design in an AI World
tapps
1
240
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
250
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
200
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.3k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
390
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
360
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
300
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
270
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
210
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Transcript
Nuxt の Store 永続化の話 2019/05/24 @nyker_goto
結論 • universal の時は cookie storage つかえ • spa の時は
localstorage で OK. ssr: false は要らない
じこしょうかい @nyker_goto (twitter) 本業? • データサイエンティスト (新卒3年目) • kaggle master
なんやかんやで backend/front/インフラもします. 一番フロントが好き。イ ンフラは大変… 3
前提条件 • Nuxt.js + Rest API をつかった一般的?な SPA ◦ universal
mode (mode = “universal”) • Rest API は JWT で認証を行う • 一時的にログイン状況が必要なのではなくどのページでも認証が必要なエン ドポイントを使用する可能性がある (i.e. vuex で token を管理している)
こまること • Store の値はブラウザをリロードすると消える。都度ログインするのはだるい。 → Store の値を保持したい!!! これを永続化 persistenced ~~
といいます
vuex の store 永続化 vuex-persistedstate: https://github.com/robinvdvleuten/vuex-persistedstate スターたくさん (3091ぐらい) README.md では
nuxt だとこうやれと書いている // nuxt.config.js ... plugins: [{ src: '~/plugins/localStorage.js' , ssr: false }] ... // ~/plugins/localStorage.js import createPersistedState from 'vuex-persistedstate' export default ({store}) => { window.onNuxtReady(() => { createPersistedState ({ key: 'yourkey', paths: [...] ... })(store) }) }
このやり方の問題点 local-storage を使っている 初期値では universal mode の時は SSR が有効になっている local(ブラウザ)
に到達するまで store は空っぽ 要するにサーバーサイドレンダリングするときには store は空っぽ → サーバー内で token が必要な時ログインしていないことになる (asyncData, や nuxtServerInit, middleware など)
なので cookie-storage つかいましょう ( yarn add js-cookie をお忘れなく) import createPersistedState
from 'vuex-persistedstate' import * as Cookies from 'js-cookie' import cookie from 'cookie' export default ({ store, req, isDev }) => { createPersistedState ({ key: 'your-application-name' , storage: { getItem: key => process.client ? Cookies.getJSON(key) : cookie.parse(req.headers.cookie || '')[key], setItem: (key, value) => Cookies.set(key, value, { expires: 365, secure: !isDev }), // 365日間 cookie storage を保持する removeItem: key => Cookies.remove(key) } })(store) }
注意点と若干の補足 • Cookie-Storage は secure: true のとき https 通信時のみ有効になります。ちゃん と
SSL を付与しておかないと永続化できてねえ?! ってなりますのでご注意 (process.env.NODE_ENV で切り替えるようにしておくと dev の時便利) • plugins にいれるとき ssr: false にしないでね (サーバー内で store の中身見たいのに実行しないって指定するなんて… • mode = SPA の時はなんも気にしないでOK. local-storage でも OK だし ssr: false も要らない。
結論 • universal の時は cookie storage つかえ • spa の時は
localstorage で OK. ssr: false は要らない