vue和react对比


模板 vs JSX



React与Vue最大的不同是模板的编写。Vue鼓励你去写近似常规HTML的模板。写起来很接近标准HTML元素,只是多了一些属性。


<ul>
   <template v-for="item in items">
       <li>{{ item.msg }}</li>
       <li class="divider"></li>
   </template>
</ul>


这些属性也可以被使用在单文件组件中,尽管它需要在构建时将组件转换为合法的JavaScript和HTML。


<ul>
 <pasta-item v-for="(item, key) in samplePasta" :item="item" :key="key" @order="handleOrder(key)"></pasta-item>
</ul>


Vue鼓励你去使用HTML模板去进行渲染,使用相似于Angular风格的方法去输出动态的内容。因此,通过把原有的模板整合成新的Vue模板,Vue很容易提供旧的应用的升级。这也让新来者很容易适应它的语法。·


另一方面,React推荐你所有的模板通用JavaScript的语法扩展——JSX书写。同样的代码,用JSX书写的例子如下:


<ul className="pasta-list">
   {
       Object.keys(this.state.pastadishes).map(key =>
           <PastaItem index={key} key={key} details={this.state.pastadishes[key]} addToOrder={this.addToOrder} orders={this.state.orders[key]} />
       )
   }
</ul>


React/JSX乍看之下,觉得非常啰嗦,但使用JavaScript而不是模板来开发,赋予了开发者许多编程能力。


JSX只是JavaScript混合着XML语法,然而一旦你掌握了它,它使用起来会让你感到畅快。这可能只是我个人的意见,但我觉得这比Angular 1风格的属性好多了,Angular 1真的难以忍受。

·

而相反的观点是Vue的模板语法去除了往视图/组件中添加逻辑的诱惑,保持了关注点分离。


值得一提的是,与React一样,Vue在技术上也支持render函数和JSX,但只是不是默认的而已。


状态管理 vs 对象属性



如果你对React熟悉,你就会知道应用中的状态是(React)关键的概念。也有一些配套框架被设计为管理一个大的state对象,如Redux。此外,state对象在React应用中是不可变的,意味着它不能被直接改变(这也许不一定正确)。在React中你需要使用setState()方法去更新状态。


addToOrder(key) {
       //Make a copy of this.state
       const orders = { ...this.state.orders };
       //update or add
       orders[ key ] = orders[ key ] + 1 || 1;
       this.setState( { orders } );
}


在Vue中,state对象并不是必须的,数据由data属性在Vue对象中进行管理。


export default {
 name: 'app',
 data() {
   return {
     samplePasta: samplePasta,
     orders: {}
   }
 },
 methods: {
   handleOrder: function (key) {
     if (!this.orders.hasOwnProperty(key)) {
       this.$set(this.orders, key, { count: 0 });
     }
     this.orders[key].count += 1;
   }
 }
}


而在Vue中,则不需要使用如setState()之类的方法去改变它的状态,在Vue对象中,data参数就是应用中数据的保存者。


对于管理大型应用中的状态这一话题而言,Vue.js的作者尤雨溪曾说过,(Vue的)解决方案适用于小型应用,但对于对于大型应用而言不太适合。


多数情况下,框架内置的状态管理是不足以支撑大型应用的,Redux或Vuex等状态管理方案是必须使用的。


有鉴于此,争论你的应用中如何管理状态很可能属于过早优化,并且这很可能只是个人偏好问题。此外,你可能真没必要担心这方面。



来源:https://deliciousbrains.com/vue-vs-react-battle-javascript


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值