×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
ぼくの さいきょうの (さいじゃく) しんちょく
Slide 2
Slide 2 text
自己紹介 名前: たじま(schktjm) 分野: フロントエンド(Vue, React), デザイン 趣味: バイク, 日本酒 好きなwebサービス: Twitter
Slide 3
Slide 3 text
目次 - vuexとは - vue-routerとは - 使う場面 - なにがいいか - 今回ぶち当たった問題と解決方法
Slide 4
Slide 4 text
vuexとは? 参考 https://vuex.vuejs.org/ja/ - Vue.jsアプリケーションのための状態管理パターン+ライブラリ - conponent間のバケツリレーを楽にしてくれる - 実質グローバルなので管理が大変
Slide 5
Slide 5 text
vue-routerとは? - Vue.js の公式ルータ。 - ルーティングがめっちゃ楽。 - https://router.vuejs.org/ja/
Slide 6
Slide 6 text
ぶちあたった問題! ログイン状態や、セッショントークンを vuexで管理していたSPAをつくっていました。 isValidToken というAPIが生えていて、vuexのactionからトークンが有効かどうかたしかめられます。 ここで、 セッショントークンが切れている時にリロードすると API呼んでいるところで402になり上手くできない。 トークンが有効の時はそのまま、 トークンが無効な時はログイン画面に飛ばしたい。
Slide 7
Slide 7 text
最初にやった方法 1. App.vueのcreated()で、トークンが有効かどうか調べる。 2. 有効ならそのままリロード、無効ならログインページへ遷移
Slide 8
Slide 8 text
何が起こったか 見た目ではログインページに遷移しているが、子コンポーネントで呼ばれるAPIが402に なっている。 (コンソールを開かなきゃバレない)
Slide 9
Slide 9 text
なぜか どうやらインスタンスが作られた場合、 再帰的に子コンポーネントのcreatedも 行われるっぽい。createdでやっては意 味がない。 App.vue Home.vue About.vue HelloWorld Hoge.vue ChildHoge router-view
Slide 10
Slide 10 text
(子コンポーネントを含めたインスタンスのライフサイクル私の ggr 力も足りなくて見つからなかったので詳しい方教えてください )
Slide 11
Slide 11 text
そこでvue-routerの本気 :heart: twitterでわからないよ〜と嘆いていたところ、vue-routerのナビゲーションブロックを使 うといいよとおしえてもらいました。:god: この名前が示すように、vue-router によって提供されるナビゲーションガードは、リダイレ クトもしくはキャンセルによって遷移をガードするために主に使用されます。ルートナビ ゲーション処理 (グローバル、ルート単位、コンポーネント内) をフックする多くの方法が あります。 https://router.vuejs.org/ja/guide/advanced/navigation-guards.html
Slide 12
Slide 12 text
もうちょい詳しくグローバルビフォーガード ● to: Route: 次にナビゲーションされる対象の ルートオブジェクト。 ● from: Route: ナビゲーションされる前の現在のルートです。 ● next: Function : フックを 解決 するためにこの関数を呼ぶ必要があります。この振る舞いは next に渡される引数に 依存します:
Slide 13
Slide 13 text
● next(): パイプラインの次のフックに移動します。もしフックが残っていない場合は、このナビゲーションは 確立 されます。 ● next(false): 現在のナビゲーションを中止します。もしブラウザのURLが変化した場合は(ユーザーが手動で変更した場合で も、戻るボタンの場合でも)、 from ルートのURLにリセットされます。 ● next('/') または next({ path: '/' }) : 異なる場所へリダイレクトします。現在のナビゲーションは中止され、あたらしいナ ビゲーションが始まります。任意のロケーションオブジェクトを next に渡すことができます。この next には、replace: true、 name: 'home' のようなオプション、そして router-link、to プロパティまたは router.pushで使用される任意のオプションを指 定することができます。
Slide 14
Slide 14 text
とりあえず、それまでの遷移先でよければ、 next() /login などに飛ばしたい場合 next(‘/login’)
Slide 15
Slide 15 text
ナビゲーションガードには コンポーネントガードがあり、 beforeRouteEnter beforeRouteUpdate beforeRouteLeave がある
Slide 16
Slide 16 text
ここで問題! 遷移をする前に、vuexのactionにおける `isValidToken` を叩いて、トークンが有効かどう かを確かめたい。 いつもだったら、this.$store をするところですが、beforeEach, beforeEnter, BeforeRouteEnterはコンポーネントを絵画するルートが確立する前に呼ぶため、thisが 使えない。 どうすれば。。。(ここに1週間詰まった)
Slide 17
Slide 17 text
正解
Slide 18
Slide 18 text
あ、はい
Slide 19
Slide 19 text
とのことなのでこんな風になりました
Slide 20
Slide 20 text
めでたしめでたし githubに今回のテストコードをあげてるので よければ見てください!