React和vue都是作組件化的,總體的功能都相似,可是他們的設計思路是有不少不一樣的。使用react和vue,主要是理解他們的設計思路的不一樣。css
若是你喜歡用(或但願可以用)模板搭建應用,請使用Vue
若是你喜歡簡單和「能用就行」的東西,請使用Vue
若是你的應用須要儘量的小和快,請使用Vue
若是你計劃構建一個大型應用程序,請使用React
若是你想要一個同時適用於Web端和原生App的框架,請選擇React
若是你想要最大的生態圈,請使用React
若是你已經對其中一個用得滿意了,就沒有必要換了html
一、設計思路:vue
二、簡單能用就行-Vue:react
Vue項目不須要轉譯可直接在瀏覽器中使用,這使得在項目中使用Vue能夠像使用jQuery同樣容易。固然這對於React來講在技術上也是可行的,但典型的React代碼是更多地依賴於JSX和諸如class等ES6特性的。而Vue的簡單則是更深層地源於其設計的。讓咱們來比較一下這兩個框架是如何處理應用數據的(即「state」):typescript
React裏的狀態(state)是不可變(immutable)的,所以你不能直接地改變它,而是要用setState API方法:api
this.setState({ message: this.state.message.split('').reverse().join('') });
React是經過比較當前狀態和前一個狀態的區別來決定什麼時候及如何從新渲染DOM的內容,所以須要使用不可變的狀態。 數組
而與此相反的是,Vue中的數據是可變的(mutated),因此一樣的數據變量能夠用簡潔得多的方式修改:瀏覽器
// Note that data properties are available as properties of // the Vue instance
this.message = this.message.split('').reverse().join('');
讓咱們來看看Vue中是如何對狀態進行管理的:當你向狀態中添加一個新對象時,Vue將遍歷其中的全部屬性而且將它們轉換爲getter,setter方法。因而Vue的響應系統開始保持對該狀態的跟蹤,當該狀態的內容發生變化的時候就會自動從新渲染DOM。使人佩服的是,Vue中改變狀態的操做不只更加簡潔,並且它的從新渲染系統實際上比React的更快更高效。性能優化
不過Vue的響應系統仍是有些坑的,好比它沒法檢測屬性的添加和刪除,以及某些數組更改。這時候就要用Vue API中的相似於React的set方法的措施來解決。服務器
3、頁面編寫方式:
模板搭建應用。
Vue應用的默認選項是把markup放入HTML文件中。數據綁定表達式使用的是與Angular類似的雙大括號(moustache)語法,而指令(特殊的HTML屬性)則用於向模板中添加功能。
//HTML <div id="app"> <p>{{ message }}</p> <button v-on:click="reverseMessage">Reverse Message</button> </div>
//JS new Vue({ el: '#app', data: { message: 'Hello Vue.js! }, methods: { reverseMessage: function () { this.message = this.message.split('').reverse().join(''); } } });
React應用不使用模板。而是使用JSX在JavaScript中建立DOM。JS操做一切
//HTML <div id="app"></div>
//JS
class App extends React.Component { constructor(props) { super(props); this.state = { message: 'Hello React.js!' }; } reverseMessage() { this.setState({ message: this.state.message.split('').reverse().join('') }); } render() { return ( <div> <p>{this.state.message}</p> <button onClick={() => this.reverseMessage()}> Reverse Message </button> </div> ) } }
ReactDOM.render(App, document.getElementById('app'));
對於來自標準Web開發的新開發者來講,vue是把html,css,js組合到一塊兒,用各自的處理方式,vue有單文件組件,能夠把html、css、js寫到一個文件中,html提供了模板引擎來處理,模板更容易理解。然而甚至連一些資深的開發者也喜歡使用模板,由於模板能更好地把功能和佈局分割開來,還爲使用Pug之類的模板引擎提供了可能。
不過使用模板的代價在於你須要學習全部的HTML擴展語法,而渲染函數(render function)只要求會使用標準的HTML和JavaScript。並且比起模板,渲染函數更易於調試和測試。可是,你並不該該所以就錯過Vue,由於在Vue2.0中已經提供了使用模板或者渲染函數的選項。
3、類式的組件寫法,仍是聲明式的寫法:
react是類式的寫法,api不多,
而vue是聲明式的寫法,經過傳入各類options,api和參數都不少。因此react結合typescript更容易一塊兒寫,vue稍微複雜。
react能夠經過高階組件(Higher Order Components--HOC)來擴展,而vue須要經過mixins來擴展
一個react高階組件的例子:
咱們發現,Vue的優點包括:
模板和渲染函數的彈性選擇
簡單的語法及項目建立
更快的渲染速度和更小的體積
React的優點包括:
更適用於大型應用和更好的可測試性
同時適用於Web端和原生App
更大的生態圈帶來的更多支持和工具
而實際上,React和Vue都是很是優秀的框架,它們之間的類似之處多過不一樣之處,而且它們大部分最棒的功能是相通的:
利用虛擬DOM實現快速渲染
輕量級
響應式組件
服務器端渲染
易於集成路由工具,打包工具以及狀態管理工具
優秀的支持和社區