本人原爲React開發者,如今轉戰Vue。在這些天接觸Vue的日子裏,說說本身的感受:一樣的爬山活動,React就像父親,給你必要的爬山工具就讓你出發了;Vue就像母親,在你爬山以前爲你準備好了全部東西,嘮嘮叨叨了一波,規劃了路線,給了你厚厚的導航指南,才讓你出發。vue
有必定的React開發經驗,正在並行使用Vue的開發者react
JSX表達式用{}包裹,vue模板表達式用{{}}包裹,其他一致.express
vue模板表達式: 數組
代碼比較:bash
<!--vue-->
<template>
<div>
<p>I have a {{ product }}</p>
<p>{{ product + 's' }}</p>
<p>{{ isWorking ? 'YES' : 'NO' }}</p>
<p>{{ product.getSalePrice() }}</p>
</div>
</template>
<!--react-->
<div>
<p>I have a { product }</p>
<p>{ product + 's' }</p>
<p>{ isWorking ? 'YES' : 'NO' }</p>
<p>{ product.getSalePrice() }</p>
</div>
複製代碼
Vue模板:小夥子,用你的頭髮記好了,有以下指令:dom
Vue模板指令: 函數
JSX:啥啥啥,你本身實現不就行了嗎。。。工具
style={ifShow ?{} : { display: 'none' }}
複製代碼
代碼比較:佈局
<!--vue指令-->
<template>
<div>
<p v-if="container1">你如今看到container1了</p>
<p v-else-if="container2">你如今看到container2了</p>
<p v-else>你如今看到default了</p>
<p v-show="ifShow">影響顯示的p</p>
<input type="text" v-model="inputText"/>
</div>
</template>
<!--react指令-->
<div>
{
container1 ?
<p>你如今看到container1了</p> :
container2 ?
<p>你如今看到container2了</p> :
<p>你如今看到default了</p>
}
<p style={{display: ifShow ? 'block' : 'none'}}></p>
<input type="text" onChange={val => () => {this.setState{inputText:val}}}
value={this.state.inputText}/>
</div>
複製代碼
Vue模板列表渲染:v-for React JSX: 直接在dom中插入map函數,裏面直接用js來處理參數優化
<!--vue-->
<template>
<ul>
<li v-for="(item, i) in list" :key="item.id">{{item.text}}</li>
</ul>
</template>
<!--react-->
<div>
<ul>
{
list.map((item, i) => <li key={item.id}>{item.text}</li>)
}
</ul>
</div>
複製代碼
綁定其實就是組件的傳參,經過綁定,將對應的參數傳遞到子組件。常見的綁定有:一、普通屬性綁定;二、style屬性綁定,三、class屬性綁定; Vue的數據綁定:
React JSX: 呵呵,style不是屬性啊?class不是屬性啊?弄那麼複雜幹嗎?!什麼?大家說咱們style不支持數組?你將數組轉換成對象就行了嗎?你說咱們class不支持對象以及數組? classnames庫瞭解一下。<!--vue綁定-->
<ul>
<li :type="liType"></li>
<!--style支持數組傳入-->
<li :style="[{backgroundColor: '#fff'}]"></li>
<!--style支持對象傳入 若是變量active爲true則添加對應的'active'類-->
<li :style="{active}"></li>
<!--class支持數組傳入 若是變量active爲true則添加對應的'active'類-->
<li :class="[active]"></li>
<!--class支持對象傳入 若是變量active爲true則添加對應的'active'類-->
<li :class="{active}"></li>
</ul>
<!--react綁定-->
<ul>
<li type={liType}></li>
<!--style須要支持數組傳入??本身用函數(將數組轉爲對象)處理吧-->
<li style={this.arrayToObj([{backgroundColor: '#fff'}])}></li>
<!--style支持對象傳入-->
<li style={{backgroundColor: '#fff'}}></li>
<!--class須要支持數組傳入??本身用函數處理吧,函數都懶得寫?classnames庫瞭解一下-->
<li className={this.arrayToString([{backgroundColor: '#fff'}])}></li>
<!--class須要支持對象傳入??本身用函數處理吧,函數都懶得寫?classnames庫瞭解一下-->
<li className={classnames({active})}></li>
</ul>
複製代碼
Vue模板:記住了,有如下事件處理
JSX:跟js事件名稱一致,直接放置在對應的節點進行事件綁定就好<!--vue-->
<template>
<button v-on:click="handleBtn">我是一個點擊按鈕</button>
</template>
<!--react-->
<div>
<button onClick={this.handleBtn}>我是一個點擊按鈕</button>
</div>
複製代碼
Vue模板與JSX的基本使用比較完了,Vue模板爲你考慮了不少優化的東西,你只須要記住其中的規則就好,更大的下降了技術門檻。而JSX將更大的控制權留給了代碼編寫者。