前端框架Vue, React, Lightue各方面对比

Vue和React是我们熟知的前端两大框架,不过目前也出现一些新的轻量替代品,比如Lightue。本文将从各个方面来对比这三个框架,帮助开发者更好地进行取舍。

体积 min+br

体积方面Vue、React差不多,Lightue则小很多

应用创建和数据渲染

  • Vue
<div id="root">
  Counter: {{ counter }}
</div>
const Counter = {
  data() {
    return {
      counter: 0
    }
  }
}

Vue.createApp(Counter).mount('#root')
  • React
<div id="root">
</div>
function Counter() {
  const [counter, setCounter] = React.useState(0)
  return <div className='counter'>Counter: {counter}</div>
}
ReactDOM.createRoot(
  document.getElementById('root')
).render(<Counter />)
  • Lightue
<div id="root">
</div>
var L = Lightue
function Counter() {
  var S = Lightue.useState({
    counter: 0
  })
  return {
    $class: {counter: true},
    $$: () => 'Counter: ' + S.counter
  }
}
L(Counter(), {
  el: '#root'
})

应用创建方面可以看到三者都是首先创建一个Counter组件,然后将其用作根组件并挂载到#root元素上,不过我们可以看出它们的一些区别:Vue的组件是一个选项对象,而React的组件是一个渲染函数,Lightue的则是一个产生VDomSrc的工厂函数,且Lightue中习惯将Lightue缩写为L,将状态缩写为S。Vue的根组件可以不声明模板而是使用被挂载节点的内容作为模板;React使用jsx的方式来混写模板;Lightue则是用返回的VDomSrc对象作为模板。

开始计数

  • Vue
  mounted() {
    this.timer = setInterval(() => {
      this.counter++
    }, 1000)
  },
  beforeUnmount() {
    clearInterval(this.timer)
  }
  • React
  React.useEffect(() => {
    var counterMutable = counter
    const timer = setInterval(() => {
      counterMutable ++
      setCounter(counterMutable)
    }, 1000)
    return () => {
      clearInterval(timer)
    }
  }, [])
  • Lightue
  var interval = setInterval(() => {
    S.counter++
  }, 1000)
  return {
    $cleanup: () => clearInterval(interval),
    ...
}

添加计数方法,可以看到Vue每次都需要用this去访问数据和方法,略显不便,不过在Vue3中,添加了setup和ref改进了这点;React如果直接在useEffect里面使用setInterval修改counter的话,会发现计数到1就不增长了,这是因为useEffect无依赖所以只执行了一次,只抓住了第一次渲染时的counter值,所以还需要在函数里加一个counterMutable变量来保存counter的状态,开发心智负担较大;Lightue的话像Vue一样直接修改状态就行,不过清理的函数需要加在返回的对象$cleanup内。

绑定元素属性

  • Vue
<div id="bind-attribute">
  <span v-bind:title="message">
    鼠标悬停几秒钟查看此处动态绑定的提示信息!
  </span>
</div>
  data() {
    return {
      message: 'You loaded this page on ' + new Date().toLocaleString()
    }
  }
  • React
  const [message, setMessage] = React.useState('You loaded this page on ' + new Date().toLocaleString())
  return <div id="bind-attribute">
    <span title={message}>
      鼠标悬停几秒钟查看此处动态绑定的提示信息!
    </span>
  </div>
  • Lightue
  var S = Lightue.useState({
    message: 'You loaded this page on ' + new Date().toLocaleString()
  })
  return {
    _id: 'bind-attribute',
    $$: L.span({
      _title: () => S.message,
      $$: '鼠标悬停几秒钟查看此处动态绑定的提示信息!'
    })
  }

可以看到Vue通过v-bind指令或简单的冒号来标明属性绑定;React是用的jsx的花括号来进行属性绑定;Lightue通过一个状态函数来建立属性与状态的关系。三者拥有不同的写法但是使用效果上没有大的差异。

未完待续

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,820评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,648评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,324评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,714评论 1 297
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,724评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,328评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,897评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,804评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,345评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,431评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,561评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,238评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,928评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,417评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,528评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,983评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,573评论 2 359

推荐阅读更多精彩内容