Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Nuxt.jsが掲げる"Universal Vue.js Applications"とは何者か

Nuxt.jsが掲げる"Universal Vue.js Applications"とは何者か

Yosuke Ishikawa

October 04, 2017
Tweet

More Decks by Yosuke Ishikawa

Other Decks in Programming

Transcript

  1. Nuxt.js
    が掲げる
    "Universal Vue.js Applications"
    とは何者か

    View Slide

  2. View Slide

  3. View Slide

  4. View Slide

  5. Universal Mode
    SPA Mode

    View Slide

  6. Universal Mode ←
    こっち
    SPA Mode

    View Slide

  7. View Slide

  8. View Slide

  9. わかるようでわからない

    View Slide

  10. でも、使ってみたら理解できた

    View Slide

  11. View Slide

  12. View Slide

  13. View Slide

  14. デベロッパーは1
    つの
    Nuxt.js
    アプリ(
    ≒ Vue.js
    アプリ)

    開発するが...

    View Slide

  15. SSR
    するサーバーも生成される

    View Slide

  16. "Universal Vue.js Applications"

    View Slide

  17. そういう感じか~

    View Slide

  18. Vue.js
    のアプリと
    生成されるサーバーの関係は?

    View Slide


  19. ディレクトリ構造 →
    ルーティングに反映
    asyncData() →
    サーバーサイドで実行

    View Slide

  20. ルーティング

    View Slide

  21. pages
    ├── index.vue
    └── items
    ├── _id.vue
    ├── create
    │ └── index.vue
    └── index.vue
    Nuxt.js
    アプリのディレクトリ構造

    View Slide

  22. export function createRouter () {
    return new Router({
    mode: 'history',
    base: '/',
    (中略)
    routes: [
    {path: "/", component: _d26d9516, name: "
    {path: "/items", component: _8ac95cea, nam
    {path: "/items/create", component: _4bfc3
    {path: "/items/:id", component: _07563ab3
    ]
    })
    }
    生成されたサーバーのルーティング

    View Slide

  23. asyncData()

    View Slide

  24. asyncData()
    最初に取得するデータをSSR

    View Slide

  25. ...
    <br/>export default {<br/>async asyncData ({ app }) {<br/>const res = await app.axios.$get('/api/item<br/>return {<br/>items: res.items,<br/>nextCursor: res.nextCursor,<br/>}<br/>}<br/>}<br/>
    Nuxt.js
    アプリの.vue
    ファイル

    View Slide

  26. let asyncDatas = await Promise.all(Components.m
    let promises = []
    if (Component.options.asyncData && typeof Com
    let promise = promisify(Component.options.a
    (中略)
    promises.push(promise)
    }
    (中略)
    return Promise.all(promises)
    }))
    context.nuxt.data = asyncDatas.map(r => r[0] ||
    で実行してdata
    にセット

    View Slide

  27. 要するに

    View Slide

  28. Vue.js
    アプリを書いてたら
    SSR
    するサーバーが生成される

    View Slide

  29. View Slide

  30. サーバーはNode.js

    View Slide

  31. サーバーの動作はカスタマイズ可能
    外れすぎない範囲で使うのが良さそう

    View Slide