Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Nuxtでのサーバー、クライアント間データ共有について
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Hori Godai
July 12, 2019
Programming
1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Nuxtでのサーバー、クライアント間データ共有について
Hori Godai
July 12, 2019
More Decks by Hori Godai
See All by Hori Godai
TypeScript Compiler APIを使って 型のユニットテストをブラウザーで動かす
steelydylan
3
290
エディター付きのReact開発環境を ブラウザーだけで実装した話
steelydylan
9
2.1k
HonoでReact・TypeScriptの実行環境をブラウザー上に作る
steelydylan
1
2.7k
複数ピンをまとめて表示するYahoo!地図用のJavaScriptライブラリをつくりま作りました
steelydylan
1
1.3k
next.jsを使ったuniversal React 入門
steelydylan
1
340
a-blog cmsの静的書き出し機能を使って、 自分のブログを100%静的にした話
steelydylan
0
450
MySQLの GEOMETRY 型とJavaScriptの Geolocation API の活用事例
steelydylan
1
540
アップルップルの新しいオープンソースの紹介
steelydylan
0
570
a-blog cms をよくするために 取り組んだ3つのこと
steelydylan
0
650
Other Decks in Programming
See All in Programming
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
100
From 6 People Classroom Meetup to 100 People Regional Conference / FOSS4G Hiroshima 2026
furukawayasuto
0
120
[DroidKaigi 2026] Bring your own phones to Gradle Managed Devices
f2lk
0
110
Hello, Hiroshima Geospatial Data! — Exploring DoboX with Python
ra0kley
0
180
Seeing Through Serverless: Observability for AWS Lambda with ADOT and CloudWatch Application Signals
seike460
PRO
1
130
業務時間外もAIに働いてもらう話
colorful12
3
10k
ソフトウェアラスタライザ
fadis
1
800
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
140
フロントエンドUIフレームワークのこれまでとこれから
ssssota
1
1.1k
新卒PdEのリアル
ryu1013
1
460
FastAPI の並行処理モデルを完全に理解する
hoto17296
9
3.8k
Webプラットフォームで議論されているセキュリティ課題 / Security issues being discussed on Web Platforms
petamoriken
0
290
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
97
6.8k
For a Future-Friendly Web
brad_frost
183
10k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
320
Side Projects
sachag
455
43k
We Have a Design System, Now What?
morganepeng
55
8.3k
Fireside Chat
paigeccino
42
4k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
370
Into the Great Unknown - MozCon
thekraken
41
2.7k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Transcript
Nuxtでのサーバー、クライアント間 データ共有について
None
はじめてNuxtを触った時の自分の悩み nuxtServerInit , fetch , serverPrefetch , asyncData 色々あるけどクライアントだけで動かしたいコード、サ ーバー側で処理してクライアントに渡したいコードがあ
る場合とかどのメソッドを使ったらいいの??
深みにはまる serverPrefetch うまく動かないぞ! fetch はこのバージョンでは動かないのか?? nuxtServerInit 動いてない??
こういうフロー図を発見
この際なのでNuxtのライフサイクルと データの受け渡し周りを整理して見ました
まずはじめに動くのが、nuxtServerInit Vuexのaction として記述する context.commit すればvuexに入りデータが永続化する!
nuxtServerInit ただし、アプリケーションのロード時以降はnuxt-link で画面遷移しても発火しない ページ全体に必要なStoreデータはここで取得(ログイン情報など)
次にmiddlewareが動く! Vuexのstore が取れるのでログイン状態に応じてのリ ダイレクト処理をしたりなど!
次にLayoutが動作!
serverPrefetch Nuxt 2.6以降から使える! layout やpage コンポーネントで利用可 サーバーサイドでのみ動作するがthis コンテキストも利用できるのが嬉しい! 個人的にはlayoutレベルで必要なデータを取得する際に利用 this.$store.dispatch
でデータをvuexに送れるのが嬉しい!! Promise をreturn しないとクライアントからは更新されたVuex の結果が見れない! Vue Vue. .extend extend( ({ { serverPrefetch serverPrefetch( () ) { { return return this this. .$store $store. .dispatch dispatch( ('user/fetch' 'user/fetch', , this this. .$ $ } } } }
fetch Nuxt 2.8以降から使える! pageコンポーネントで利用可 this が使えない。。。 個人的にはページレベルで必要なデータを取得する際に利用 Vuex にcommit したりできるぞ!
Promise をreturn しないとクライアントからは更新されたVuex の結果が見れない! Vue Vue. .extend extend( ({ { async async fetch fetch ( ({ { store store, , params params } }) ) { { const const res res = = await await axios axios. .get get( ('http://my-api/sta 'http://my-api/sta store store. .commit commit( ('setStars' 'setStars', , res res. .data data) ); ; } } } }) )
asyncData あらかじめサーバーサイド側でdata に格納したい値をセットできる! this が使えない。。。。 Vuex にdispatch したりはできなさそう。。。 Vue Vue.
.extend extend( ({ { asyncData asyncData ( (context context) ) { { return return { { project project: : 'nuxt' 'nuxt' } } } } } }) ); ;
apolloモジュールを使っている場合 @nuxtjs/apollo モジュールを使えばapollo から 取得した値をthis.data に格納できる。 prefetch:true にしておけばサーバーサイドで取得できる! this に依存するコードは書けない
asyncData に近いイメージ! Vue Vue. .extend extend( ({ { apollo apollo: : { { some some: : { { prefetch prefetch: : true true, , query query: : someGql someGql, , result result( ({ { data data } }) ) { { return return { { some some: : data data. .some some } }; ; } } } } } } } }) ); ;
まとめ nuxtServerInit , fetch , serverPrefetch , asyncData を理解して快適にサーバーからデータを受け取ろう!
ありがとうございました!
@steelydylan github twitter