Vue的靈活性總是讓代碼看起來非常洗練,對TypeScript來說也是一種挑戰, 好在Vue對TypeScript進行了一次全方位的適配。
相對於React嚴謹的代碼,Redux啰嗦的樣板代碼,Vue就顯得非常靈活。Vue采用雙向綁定原理,如下圖所示
雙向綁定的好處是這樣的,在數據發生變化的時候,會發布一個叫“model-update”的事件,類似,當視圖發生變化的時候,會發布一個叫“ui-update”的事件,Vue自動訂閱了這些事件,並能自動處理好,我們無需關心到底是數據變化了還是UI變化了,Vue都能自己處理好。尤其是在繪制長的Form表單時,只需要將變量綁定在輸入的模塊上,無論是用戶輸入還是通過代碼手動賦值,模塊都會自動變化,不需要再去關心每個輸入的細節。
雖然Vue很棒,但對TypeScript的支持並不是那么完美,還有一些細節需要我們去做。
⒈安裝Vue腳手架
npm install -g @vue/cli # OR yarn global add @vue/cli
⒉初始化項目
vue create ts-vue
Vue的組件和React非常不同
Vue的代碼是這樣的:
<template> <div id="app"> <img alt="Vue logo" src="./assets/logo.png"> <HelloWorld msg="Welcome to Your Vue.js App"/> </div> </template> <script> import HelloWorld from './components/HelloWorld.vue' export default { name: 'app', components: { HelloWorld } } </script> <style> #app { font-family: 'Avenir', Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px; } </style>
我們可以清晰看到style、script以及html都在一個Vue組件里,支持TypeScript也只是讓script標簽能兼容TypeScript語法,與Node及React開發中直接修改整個文件名是截然不同的。
同時你會發現,Vue的腳手架做的非常簡單易懂,項目結構已經完全給你部署好了。
⒊集成TypeScript
https://cn.vuejs.org/v2/guide/typescript.html
*vue-class-component是Vue官方維護的一個庫,可以讓我們在Vue里面按照類的形式寫代碼
*如果希望在Vue里使用props或者watch,推薦安裝vue-property-decorator
*如果你想在Vue中使用單向數據流的Redux,這也是允許的,官方推薦的工具是Vuex。Redux的架構由State、Reducer以及Action構成的,如圖所示:
*但Vuex的概念略有不同,如下圖所示:
Mutation相當於Reducer,用getter對State的查詢進行了封裝,使其有一個充滿含義的名字:
const store = new Vuex.Store({ state:{ todos:[ {id:1.text:'...',done:true}, {id:2.text:'...',done:false}, ] }, getters:{ doneTodos: state => { return state.todos.filter(todo => todo.done) } } })