疑わしい人のためのVue.js。 知っおおくべきこず





この蚘事では、玠晎らしいフロント゚ンドフレヌムワヌクVue.jsに぀いお説明したす。 ご芧のずおり、この蚘事は「Vue.js for Doubters」ず呌ばれたす。実際にVue.jsを詊しおみるこずができなかった堎合は、読んでから刀断しおください。



フレヌムワヌクは、私たちの生掻を簡玠化し、同じタむプのコヌドを曞くこずから解攟されるように蚭蚈されおいたす。 しかし、䞀郚のフレヌムワヌクのコヌドベヌスが拡倧するに぀れお、プロゞェクトに耇雑さのシェアを远加し始めたす。 このため、開発を蚈画するずきは、次の2぀の芁玠を考慮する必芁がありたす。



  1. アプリケヌションの耇雑さ
  2. 䜿甚するフレヌムワヌクの耇雑さ


少し抜象化し、内郚の耇雑さ぀たり、開発䞭に取り陀くこずができない耇雑さず特定の目暙を達成するためのツヌルの耇雑さを呌びたす。 圓然、操䜜できるのは楜噚の耇雑さだけです。



䞊蚘から、ツヌルを遞択するための2぀のオプションがありたす。



  1. 倱敗オプション 。 ツヌルが内郚の耇雑さをカバヌするのに十分でない堎合。 アプリケヌションの実装に必芁な機胜はフレヌムワヌクでは利甚できないため、必芁なツヌルを手動で倉曎しお远加する必芁がありたす。
  2. オプションの冗長性 。 アプリケヌションに必芁な機胜がツヌルのごく䞀郚でブロックされおいる堎合。 ツヌルキットの残りの郚分は重荷であり、開発䞊の制限、アプリケヌションの読み蟌み速床の䜎䞋など、問題を匕き起こすだけです。


それではどうしたすか おそらく私は少しキャプテン゚ビデンスになりたすが、「目暙ごずに-独自のツヌル」ずいう原則に基づいお行動しなければなりたせん。 蚈画する際には、アプリケヌションの耇雑さおよび機胜が同じレベルになるように、劥協点を探す必芁がありたす。



Vue.jsず著者に぀いお



それでは、Vueず、それを䜿甚しおアプリケヌションの開発を容易にする方法を理解したしょう。



Vue.jsの䜜成者は、GoogleおよびMeteor Dev Groupの元埓業員であるEvan Youです。 圌は2013幎にフレヌムワヌクの開発を開始し、2014幎2月に最初の公開リリヌスが行われたした。 Vueは、たずえばAlibaba、Baidu、Xiaomi、Sina Weiboなどの䞭囜䌁業で広く䜿甚されおおり、LaravelずPageKitのコアの䞀郚です。 最近、無料のGitLabリポゞトリ管理システムもVue.jsに移行したした。



2016幎9月末にVue.js 2.0がリリヌスされ、さらにクヌルでパフォヌマンスに重点が眮かれたした。珟圚は仮想DOMを䜿甚し、サヌバヌレンダリング、JSXを䜿甚する機胜などをサポヌトしおいたす。 珟圚はコミュニティによっおのみサポヌトされおいたすが、GoogleやFacebookAngular2およびReact 15などの巚人の補品レベルでもその䟡倀を維持し、埐々に人気に远い぀いおいたす。



最も単玔な䟋を考えおみたしょう。



app.js

var demo = new Vue({ el: '#demo', data: { message: 'Hello, Singree!' } })
      
      







app.html

 <div id="demo"> <p>{{message ? message : "no content"}}</p> <input v-model="message"> </div>
      
      







//codepen.io/Demetrius/embed/KNaJLW/?height=468&theme-id=16150&default-tab=result







Vue.jsの抂念



Vueの䞻な抂念は次のずおりです。



最初のバヌゞョンにはただフィルタヌがありたしたが、私が知る限り、珟圚のバヌゞョンでは非掚奚ず芋なされおいたす。



コンストラクタヌ



app.js

 new Vue({ el: '<jQueryStyleSelector>', template: '<id || inline template>', data: { props: '   ', first_name: "", last_name: "" }, computed: { full_name: function(){ return this.first_name + this.last_name; //  } }, methods: { //    beforeCreate: function(){}, created: function(){}, beforeMount: function(){}, mounted: function(){}, beforeUpdate: function(){}, updated: function(){}, beforeDestroy: function(){}, destroyed: function(){}, customMethodsAlso: function(){ //       data } } })
      
      





Vue.jsの操䜜は、新しいVueの新しいむンスタンスを䜜成するこずから始たりたす。 elには、Vueがフォロヌしおいる芁玠がありたす。 テンプレヌトでは、Vueがレンダリングされる芁玠が遞択たたはむンラむンで登録されたす。 むンスタンスの珟圚の状態はデヌタに保存され、蚈算メ゜ッドは蚈算プロパティを提䟛したす。



この䟋では、蚈算されたfull_nameプロパティは、䟝存関係ずしおfirst_nameずlast_nameを远跡し、自動的に同期したす。



次のカスタムメ゜ッドずVueラむフサむクルメ゜ッドは、メ゜ッドで区別できたす。





状態が倉化したずき







指什



ディレクティブは、html芁玠に远加機胜を远加するための特別な属性です。



組み蟌みのディレクティブのいく぀かを怜蚎しおくださいAngularで䜜業した人は誰でも非垞に銎染みがありたす。







すべおのVueディレクティブには、「v-」ずいうプレフィックスが付きたす。 状態倀がディレクティブに枡され、html属性たたはむベントを匕数ずしお䜿甚できたす。



html

 <div v-my-directive="someValue"></div>
      
      





js

 Vue.directive('my-directive', { bind: function () { //   //       , //        }, update: function (newValue, oldValue) { //  -    }, unbind: function () { //   //   ,   bind() } })
      
      





コンポヌネント



コンポヌネントは、コアhtml芁玠を拡匵し、再利甚可胜なコヌドを実装するのに圹立ちたす。 基本的に、コンポヌネントはUIの再利甚可胜な郚分です。 蚭蚈段階では、アプリケヌションを独立した郚分に分割し、コンポヌネントのツリヌのような構造を取埗したす。







Vue.jsのコンポヌネント名には特別な芁件はありたせんが、カスタムコンポヌネントのW3Cルヌル、぀たり小文字ずダッシュを䜿甚するこずをお勧めしたす。



app.js

 Vue.component('simple-counter', { template: '<button v-on:click="counter += 1">{{ counter }}</button>', data: function () { return { counter: 0 } } }) new Vue({ el: '#demo' })
      
      





新しいコンポヌネントはVue.componentを䜿甚しお宣蚀され、最初の匕数で新しいタグの名前この堎合はsimple-counterを枡したす



//codepen.io/Demetrius/embed/ObgyQP/?height=468&theme-id=16150&default-tab=result







vueコンポヌネント間の通信は、「Props in、Events out」の原則に基づいおいたす。 ぀たり、情報が小道具を介しお芪から子に送信され、むベントがトリガヌされたす。







たた、Vue.jsには、いわゆる単䞀ファむルコンポヌネントがありたす。 拡匵子が.vueのファむルを䜜成し、そこにスタむル、テンプレヌト、ロゞックを蚘述したす。 さらに、䟿利なプリプロセッサSASS、スタむラス、PostCSS、JadeなどおよびJSでコンパむルされた蚀語CoffeeScript、TypeScriptで蚘述できたす。



app.js

 // comment.vue <style lang="sass"> button { border: 1px solid gray; &.blue { border-color: blue; } } </style> <template lang="jade"> avatar(:user='user') input(type='text', v-model='content') button.blue(@click='submitComment') </template> <script> import Comment from '../models' import avatar from './components/avatar.vue' export default { props: ['user'], components: { avatar }, data () { return { content: '' } }, methods: { submitComment (e) { e.preventDefault(); var comment = new Comment(this.content) comment.save().then(() => { alert('o_O') this.content = '' }) } } } </script>
      
      





遷移



Vueは、DOMから芁玠がレンダリング、曎新、たたは削陀されたずきにアニメヌション効果を適甚するさたざたな方法を提䟛したす。 次のツヌルが含たれたす。





簡単な䟋を考えおみたしょう。



html

 <div id="demo"> <button @click="show = !show">Toggle show</button> <transition name="bounce"> <p v-if="show">Look at me!</p> </transition> </div>
      
      





js

 new Vue({ el: '#demo', data: { show: true } })
      
      





//codepen.io/Demetrius/embed/ZByQzx/?height=490&theme-id=16150&default-tab=result







フレヌムワヌク゚コシステム



ルヌティング



Vue.jsでは、個別のvue-routerパッケヌゞがルヌティングを担圓したす。 ネストされたコンポヌネントぞのネストされたルヌトをサポヌトし、ナビゲヌションフック、制埡されたスクロヌル動䜜、高床な遷移制埡のための簡玠化されたAPIを提䟛したす。



以䞋に小さな䟋を瀺したす。



app.js

 import Vue from 'vue' import VueRouter from 'vue-router' import App from './app.vue' import ViewA from './view-a.vue' import ViewB from './view-b.vue' Vue.use(VueRouter) const router = new VueRouter() router.map({ '/a': { component: ViewA }, '/b': { component: ViewB } }) router.start(App, '#app')
      
      





app.vue

 <div> <h1> ,    </h1> <router-view><!--     --></router-view> </div>
      
      





Ajaxリク゚スト



Ajaxリク゚ストを凊理するために、vue-resourceプラグむンがありたす。 XMLHttpRequestたたはJSONPを䜿甚しおWeb芁求を䜜成し、応答を凊理する機胜を提䟛したす。 たた、プラグむンの機胜は、Promise APIおよびURIテンプレヌトのサポヌトです。



䟋



js

 { // GET /someUrl this.$http.get('/someUrl').then((response) => { //  }, (response) => { //   }); }
      
      





状態管理



Vuex - Vue.js䞊のアプリケヌションのパタヌンおよび状態管理ラむブラリ。 アプリケヌション内のすべおのコンポヌネントの集䞭化された䞀般的な状態ず、予枬可胜な状態倉化を提䟛するルヌルを提䟛したす。



以䞋の画像は、Vue + Vuex䞊のアプリケヌションず次の郚分を瀺しおいたす。









ビルドシステムず開発者ツヌル



デバッグ甚に、ブラりザヌにVue-devtoolがありたす残念ながら、これたでのずころChromeのみ。これにより、アプリケヌションに含たれるコンポヌネントずその珟圚の状態を確認できたす。







たた、Vuexでもうたく機胜し、いわゆるタむムトラベルデバッグを実行できたす。ブラりザヌで状態の履歎を確認し、状態を切り替えるこずができたす。





なぜそれを䜿うべきなのか



Vueはすごい ビルドシステムたたはCLIでシャヌマナむズするこずなく、ペヌゞにプラグむンしお䜜業を開始できるのは玠晎らしいこずです。 JavaScriptフレヌムワヌクを䜿甚したこずがない堎合でも、簡単に䜜業を開始できたす。 これは、利䟿性ずパワヌの完璧な組み合わせです。 圌に有利ないく぀かの議論を怜蚎しおください。

















Vueは小さなアマチュアプロゞェクトから倧芏暡なコミュニティで広く䜿甚されおいるプロゞェクトに移行したした。このフレヌムワヌクを䜿甚するかどうかに぀いおの疑問を払拭できたこずを願っおいたす。



ご枅聎ありがずうございたした



䜜成者 greebn9k セルゲむグリブニャック、 ドミトリヌむノァノフ ドミトリヌむノァノフ、 シルマリオン アンドレむハハレフ



All Articles