SlideShare uma empresa Scribd logo
1 de 19
Vue.js 2.0 を試してみた
Toshiro Shimizu
Vue.js : Revolutionary Front-end #1 24.08.2016
About me
清水 俊郎 gh: @toshilow
元フリーランスで3月からABEJAで フロントエンドエンジニアをやってます
もともとはサーバサイトJavaエンジニア
3年ほど前からフロントエンドで主にAngular 1xを使ってました
Vue.jsを使い始めてから半年
高崎から通ってます
RC3も出たし
そろそろ2.0への移行も考えていきたい
今日話すこと
1. Vue.jsのここが好き
2. 今日使うサンプルの説明
3. マイグレーションポイント
4. まとめ
Vue.jsのここが好き
リアクティブ Reactive
軽量 Lightweight
シンプル Simple
簡単 Easy
サンプルの説明
vue.js 1.0.26
vue-routerでルーティング
vuexに状態を保存
vue-router-syncを使用
webpackでビルド
vueファイルではなくhtmlテンプレート
https://github.com/toshilow/vue-v1-sample
モジュールのアップデート
# npm install vue@next vue-router@next vuex@next vue-router-
sync@next --save
@nextを指定してvue vue-router vuex vue-router-syncをアップデート
Webpack.configでaliasを追加
module.exports = {
entry: "./src/main.js",
output: {
path: path.join(__dirname, 'build'),
filename: 'main.js'},
resolve: {
alias: {
vue: 'vue/dist/vue.js'
}
},
module: {
loaders: [{test: /.scss$|.sass$/,
Standalone
(compiler + runtime)
1.0
Vue.use(VueRouter)
var router = new VueRouter()
router.map({
'/': {
component: Top
},
'/posts': {
component: Posts
},
})
2.0
Vue.use(VueRouter)
var router = new VueRouter({
routes: [
{ path: '/',
component: Top
},
{ path: '/posts',
component: Posts
},
]
})
ルーティングの書き換え
1.0
<div class="container">
<div class="nav-left">
<a v-link="{path: '/'}"
class="nav-item is-tab">Top
</a>
<a v-link="{path: '/posts'}"
class="nav-item is-tab">Posts
</a>
</div>
</div>
2.0
<div class="container">
<div class="nav-left">
<router-link to="/"
class="nav-item is-tab">Top
</router-link>
<router-link to="/posts"
class="nav-item is-tab">Posts
</router-link>
</div>
</div>
リンクの書き換え
actions.js
export const addPost =
({ commit }, post) => {
commit('ADD_POST', post)
}
export const deletePost =
({ commit }, index) => {
commit('DELETE_POST', index)
}
store.js
export const posts =
state => state.posts
VuexStoreの変更
import * as actions from './actions'
import * as getters from './getters'
export default new Vuex.Store(
{ state,
actions,
getters,
mutations })
getters.js
1.0
import { addPost, deletePost }
from "../../vuex/action"
export default Vue.extend({
vuex: {
getters: {
posts: state => state.posts
},
actions: {
addPost,deletePost
}
},
2.0
export default Vue.extend({
computed: {
...mapGetters(['posts'])
},
methods: {
...mapActions(
['addPost','deletePost']),
},
// this.$store.getters.posts
// this.$store.dispach(‘addPost’)
// とも書ける
コンポーネントとVuexのバインディング
1.0
import Vue from 'vue'
import { sync } from 'vuex-router-
sync'
import store from './vuex/store'
import router from './router/router'
sync(store, router)
router.start(
Vue.extend({store}), '#app')
2.0
import Vue from 'vue'
import { sync } from 'vuex-router-
sync'
import store from './vuex/store'
import router from './router/router'
sync(store, router)
new Vue({store, router})
.$mount('#app')
エントリーポイントの書き換え
1.0
<article class="media"
v-for="post in posts">
<div class="media-content">
<strong>{{post.title}}</strong>
<br>{{post.body}}
</div>
<div class="media-right">
<button class="delete"
@click="deletePost($index)">
</button>
</div>
</article>
2.0
<article class="media"
v-for="(post, index) in posts">
<div class="media-content">
<strong>{{post.title}}</strong>
<br>{{post.body}}
</div>
<div class="media-right">
<button class="delete"
@click="deletePost(index)">
</button>
</div>
</article>
$indexの書き換え
動作確認
まとめ
1.0との互換性は良い (ほとんどそのまま動いた)
APIのシンプルさは保たれたままでよかった
イベント通知のdispachとbroadcastが無くなるemit1択
Vue.js devtoolが便利
今後パフォーマンス測定、SSRも試してみたい
参考
Vue.js 2.0 Changes #2873
https://github.com/vuejs/vue/issues/2873
Vuex 2.0 design #236
https://github.com/vuejs/vuex/issues/236
Vue 2.0 RC Starter Resources
https://github.com/vuejs/vue/wiki/Vue-2.0-RC-Starter-Resources
Vue Router next doc
https://github.com/vuejs/vue-router/tree/next-doc
petervmeijgaard/vue-2.0-boilerplate
https://github.com/petervmeijgaard/vue-2.0-boilerplate
Join us!! 急募
おわり

Mais conteúdo relacionado

Mais procurados

クライアントサイドMVVMアーキテクチャとVue.jsをまとめたよ
クライアントサイドMVVMアーキテクチャとVue.jsをまとめたよクライアントサイドMVVMアーキテクチャとVue.jsをまとめたよ
クライアントサイドMVVMアーキテクチャとVue.jsをまとめたよSeki Yousuke
 
Vue.jsでさくっとMVVM
Vue.jsでさくっとMVVMVue.jsでさくっとMVVM
Vue.jsでさくっとMVVMSatoshi Anai
 
Angular js はまりどころ
Angular js はまりどころAngular js はまりどころ
Angular js はまりどころAyumi Goto
 
チュートリアルではじめるVue.js
チュートリアルではじめるVue.jsチュートリアルではじめるVue.js
チュートリアルではじめるVue.js小川 昌吾
 
Nuxt なしで Vue App 作る時に乗り越えるべき5つの壁
Nuxt なしで Vue App 作る時に乗り越えるべき5つの壁Nuxt なしで Vue App 作る時に乗り越えるべき5つの壁
Nuxt なしで Vue App 作る時に乗り越えるべき5つの壁Yutaro Miyazaki
 
AngularJSの高速化
AngularJSの高速化AngularJSの高速化
AngularJSの高速化Kon Yuichi
 
Async Enhancement
Async EnhancementAsync Enhancement
Async Enhancementkamiyam .
 
AngularJSでの非同期処理の話
AngularJSでの非同期処理の話AngularJSでの非同期処理の話
AngularJSでの非同期処理の話Yosuke Onoue
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSAyumi Goto
 
プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話Shohei Okada
 
3分でわかるangular js
3分でわかるangular js3分でわかるangular js
3分でわかるangular jsShin Adachi
 
はじめよう Backbone.js
はじめよう Backbone.jsはじめよう Backbone.js
はじめよう Backbone.jsHiroki Toyokawa
 
React を導入した フロントエンド開発
React を導入したフロントエンド開発React を導入したフロントエンド開発
React を導入した フロントエンド開発 daisuke-a-matsui
 
React で CSS カプセル化の可能性を考える
React で CSS カプセル化の可能性を考えるReact で CSS カプセル化の可能性を考える
React で CSS カプセル化の可能性を考えるYutaro Miyazaki
 
そろそろ押さえておきたい AngularJSのセキュリティ
そろそろ押さえておきたい AngularJSのセキュリティそろそろ押さえておきたい AngularJSのセキュリティ
そろそろ押さえておきたい AngularJSのセキュリティMuneaki Nishimura
 
マークアップ講座 04 jQuery - JavaScript
マークアップ講座 04 jQuery - JavaScriptマークアップ講座 04 jQuery - JavaScript
マークアップ講座 04 jQuery - JavaScripteiji sekiya
 
AngularJSを浅めに紹介します
AngularJSを浅めに紹介しますAngularJSを浅めに紹介します
AngularJSを浅めに紹介しますnkazuki
 
簡単AngularJS(関西AngularJS勉強会)
簡単AngularJS(関西AngularJS勉強会)簡単AngularJS(関西AngularJS勉強会)
簡単AngularJS(関西AngularJS勉強会)Takahiro Maki
 

Mais procurados (20)

クライアントサイドMVVMアーキテクチャとVue.jsをまとめたよ
クライアントサイドMVVMアーキテクチャとVue.jsをまとめたよクライアントサイドMVVMアーキテクチャとVue.jsをまとめたよ
クライアントサイドMVVMアーキテクチャとVue.jsをまとめたよ
 
Vue.jsでさくっとMVVM
Vue.jsでさくっとMVVMVue.jsでさくっとMVVM
Vue.jsでさくっとMVVM
 
Angular js はまりどころ
Angular js はまりどころAngular js はまりどころ
Angular js はまりどころ
 
チュートリアルではじめるVue.js
チュートリアルではじめるVue.jsチュートリアルではじめるVue.js
チュートリアルではじめるVue.js
 
Nuxt なしで Vue App 作る時に乗り越えるべき5つの壁
Nuxt なしで Vue App 作る時に乗り越えるべき5つの壁Nuxt なしで Vue App 作る時に乗り越えるべき5つの壁
Nuxt なしで Vue App 作る時に乗り越えるべき5つの壁
 
AngularJSの高速化
AngularJSの高速化AngularJSの高速化
AngularJSの高速化
 
Async Enhancement
Async EnhancementAsync Enhancement
Async Enhancement
 
AngularJSでの非同期処理の話
AngularJSでの非同期処理の話AngularJSでの非同期処理の話
AngularJSでの非同期処理の話
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
 
プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話
 
3分でわかるangular js
3分でわかるangular js3分でわかるangular js
3分でわかるangular js
 
はじめよう Backbone.js
はじめよう Backbone.jsはじめよう Backbone.js
はじめよう Backbone.js
 
React を導入した フロントエンド開発
React を導入したフロントエンド開発React を導入したフロントエンド開発
React を導入した フロントエンド開発
 
iOS WebView App
iOS WebView AppiOS WebView App
iOS WebView App
 
React で CSS カプセル化の可能性を考える
React で CSS カプセル化の可能性を考えるReact で CSS カプセル化の可能性を考える
React で CSS カプセル化の可能性を考える
 
そろそろ押さえておきたい AngularJSのセキュリティ
そろそろ押さえておきたい AngularJSのセキュリティそろそろ押さえておきたい AngularJSのセキュリティ
そろそろ押さえておきたい AngularJSのセキュリティ
 
React Redux Redux-Saga + サーバサイドレンダリング
React Redux Redux-Saga + サーバサイドレンダリングReact Redux Redux-Saga + サーバサイドレンダリング
React Redux Redux-Saga + サーバサイドレンダリング
 
マークアップ講座 04 jQuery - JavaScript
マークアップ講座 04 jQuery - JavaScriptマークアップ講座 04 jQuery - JavaScript
マークアップ講座 04 jQuery - JavaScript
 
AngularJSを浅めに紹介します
AngularJSを浅めに紹介しますAngularJSを浅めに紹介します
AngularJSを浅めに紹介します
 
簡単AngularJS(関西AngularJS勉強会)
簡単AngularJS(関西AngularJS勉強会)簡単AngularJS(関西AngularJS勉強会)
簡単AngularJS(関西AngularJS勉強会)
 

Semelhante a Vue.js 2.0を試してみた

Vue.js Outline
Vue.js OutlineVue.js Outline
Vue.js OutlineKei Yagi
 
svelte と tailwind で始めるフロントエンド開発
svelte と tailwind で始めるフロントエンド開発svelte と tailwind で始めるフロントエンド開発
svelte と tailwind で始めるフロントエンド開発Shuichi Takaya
 
Non blocking and asynchronous
Non blocking and asynchronousNon blocking and asynchronous
Non blocking and asynchronousNorio Kobota
 
アバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechcon
アバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechconアバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechcon
アバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechconDeNA
 
Nuxt.js入門 2018/02/02 Vue.js入門勉強会@渋谷 発表資料
Nuxt.js入門 2018/02/02 Vue.js入門勉強会@渋谷 発表資料Nuxt.js入門 2018/02/02 Vue.js入門勉強会@渋谷 発表資料
Nuxt.js入門 2018/02/02 Vue.js入門勉強会@渋谷 発表資料慎二 山田
 
超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみよう
超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみよう超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみよう
超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみようHoriguchi Seito
 
初めてのvue.js(2.x系)
初めてのvue.js(2.x系)初めてのvue.js(2.x系)
初めてのvue.js(2.x系)健人 井関
 
Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf Toshiki Iga
 
WordBench千葉「レベル別Nginx活用法」
WordBench千葉「レベル別Nginx活用法」WordBench千葉「レベル別Nginx活用法」
WordBench千葉「レベル別Nginx活用法」Endoh Shingo
 
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)Kei Yagi
 
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときNode.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときRyunosuke SATO
 
Vue.jsスロットの近代史
Vue.jsスロットの近代史Vue.jsスロットの近代史
Vue.jsスロットの近代史fuku68
 
HTML5 開発環境の紹介
HTML5 開発環境の紹介HTML5 開発環境の紹介
HTML5 開発環境の紹介tomo_masakura
 
Reactnative はじめの一歩
Reactnative はじめの一歩Reactnative はじめの一歩
Reactnative はじめの一歩PIXTA Inc.
 
React + FLUX + Redux + Redux Saga のお話
React + FLUX + Redux + Redux Saga のお話React + FLUX + Redux + Redux Saga のお話
React + FLUX + Redux + Redux Saga のお話Shinichiro Yoshida
 
AngularJSからReactに移ったケースの話
AngularJSからReactに移ったケースの話AngularJSからReactに移ったケースの話
AngularJSからReactに移ったケースの話kumatch kumatch
 

Semelhante a Vue.js 2.0を試してみた (16)

Vue.js Outline
Vue.js OutlineVue.js Outline
Vue.js Outline
 
svelte と tailwind で始めるフロントエンド開発
svelte と tailwind で始めるフロントエンド開発svelte と tailwind で始めるフロントエンド開発
svelte と tailwind で始めるフロントエンド開発
 
Non blocking and asynchronous
Non blocking and asynchronousNon blocking and asynchronous
Non blocking and asynchronous
 
アバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechcon
アバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechconアバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechcon
アバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechcon
 
Nuxt.js入門 2018/02/02 Vue.js入門勉強会@渋谷 発表資料
Nuxt.js入門 2018/02/02 Vue.js入門勉強会@渋谷 発表資料Nuxt.js入門 2018/02/02 Vue.js入門勉強会@渋谷 発表資料
Nuxt.js入門 2018/02/02 Vue.js入門勉強会@渋谷 発表資料
 
超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみよう
超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみよう超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみよう
超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみよう
 
初めてのvue.js(2.x系)
初めてのvue.js(2.x系)初めてのvue.js(2.x系)
初めてのvue.js(2.x系)
 
Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf
 
WordBench千葉「レベル別Nginx活用法」
WordBench千葉「レベル別Nginx活用法」WordBench千葉「レベル別Nginx活用法」
WordBench千葉「レベル別Nginx活用法」
 
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
 
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときNode.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないとき
 
Vue.jsスロットの近代史
Vue.jsスロットの近代史Vue.jsスロットの近代史
Vue.jsスロットの近代史
 
HTML5 開発環境の紹介
HTML5 開発環境の紹介HTML5 開発環境の紹介
HTML5 開発環境の紹介
 
Reactnative はじめの一歩
Reactnative はじめの一歩Reactnative はじめの一歩
Reactnative はじめの一歩
 
React + FLUX + Redux + Redux Saga のお話
React + FLUX + Redux + Redux Saga のお話React + FLUX + Redux + Redux Saga のお話
React + FLUX + Redux + Redux Saga のお話
 
AngularJSからReactに移ったケースの話
AngularJSからReactに移ったケースの話AngularJSからReactに移ったケースの話
AngularJSからReactに移ったケースの話
 

Vue.js 2.0を試してみた

Notas do Editor

  1. ABEJAのプロダクトでもVueを使っている 今後のバージョンアップも考えて触れておきたい Vueを使っている人? 2.0を試した人いますか?
  2. Reactive React Angular2でも同じだが 宣言的にプログラミングできる  コンポーネント化しやすい 軽量 Vue本体のファイルサイズがとても小さい  パフォーマンスもReactいいらしい シンプル 細かい機能ではない代わりにAPIがシンプル Angular1と比べるととてもシンプル  他のライブラリと組み合わせやすい 簡単  Reactと比べて学習にかかるコスト小だった  みんな知ってる知識だけで作れる  
  3. 簡単なアプリケーション 基本的なライブラリは使っている htmlテンプレートが好き Intellijのvueプラグインもあるが アシスト機能はファイルを分割した便利 lint系ツールやsassなどをpluginなしで使える sass html es6で作る最小構成 コードとアプリを見せる
  4. Vue2をインポートするとデフォルトモジュールは Runtime Onlyモジュールなので htmlテンプレートを使うため Standaloneモジュールをエイリアスに設定する Pre compileの必要がない1/3大きくなる vue-common.js 134KB vue.js 194KB
  5. ルーティングの定義方法が変更 mapファンクションがなくなり コンストラクタで指定する パスとコンポーネントをマッピングするのは 大きくは変わっていない 詳しくはテジマさんが話してくれると思います
  6. Vue1ではaタグにv-linkでリンクしていた Vue2では router-linkというコンポーネントを使う classの指定も普通にできました
  7. actionのdispach関数の名前がcommit dispachはactionのトリガーに変更 commit 同期トランザクションの状態変更 dispatch 非同期の状態変更トリガー actionsと同じようにgettersを定義してstoreに設定できるようになりました 次のコンポーネントのバインディングに関係があります
  8. いままでvuexオブジェクトのでコンポーネントで使う gettersとactionsを宣言していた 2.0ではmapGettersとmapActionsをつかってバインディングできる この書き方でコンポーネントのローカル定義も一緒にできる 前よりvuexを意識しない形になった ドキュメントを読むとSSRのための変更であるようです
  9. ルータを使ったエントリーポイントがstartではなくなった $mountを使って普通にマウントする
  10. $indexと$keyがなくなった Objectのフェッチをkey value indexを宣言して同じようにできる シンタックスが逆になったvalueとindex
  11. ブラウザに切り替え