前端框架Vue, React, Lightue各方面對(duì)比

Vue和React是我們熟知的前端兩大框架,不過(guò)目前也出現(xiàn)一些新的輕量替代品竟趾,比如Lightue冯事。本文將從各個(gè)方面來(lái)對(duì)比這三個(gè)框架,幫助開(kāi)發(fā)者更好地進(jìn)行取舍。

體積 min+br

體積方面Vue辕录、React差不多睦霎,Lightue則小很多

應(yīng)用創(chuàng)建和數(shù)據(jù)渲染

  • 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'
})

應(yīng)用創(chuàng)建方面可以看到三者都是首先創(chuàng)建一個(gè)Counter組件,然后將其用作根組件并掛載到#root元素上走诞,不過(guò)我們可以看出它們的一些區(qū)別:Vue的組件是一個(gè)選項(xiàng)對(duì)象副女,而React的組件是一個(gè)渲染函數(shù),Lightue的則是一個(gè)產(chǎn)生VDomSrc的工廠函數(shù)速梗,且Lightue中習(xí)慣將Lightue縮寫(xiě)為L(zhǎng)肮塞,將狀態(tài)縮寫(xiě)為S。Vue的根組件可以不聲明模板而是使用被掛載節(jié)點(diǎn)的內(nèi)容作為模板姻锁;React使用jsx的方式來(lái)混寫(xiě)模板枕赵;Lightue則是用返回的VDomSrc對(duì)象作為模板。

開(kāi)始計(jì)數(shù)

  • 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),
    ...
}

添加計(jì)數(shù)方法位隶,可以看到Vue每次都需要用this去訪問(wèn)數(shù)據(jù)和方法拷窜,略顯不便,不過(guò)在Vue3中涧黄,添加了setup和ref改進(jìn)了這點(diǎn)篮昧;React如果直接在useEffect里面使用setInterval修改counter的話,會(huì)發(fā)現(xiàn)計(jì)數(shù)到1就不增長(zhǎng)了笋妥,這是因?yàn)閡seEffect無(wú)依賴(lài)所以只執(zhí)行了一次懊昨,只抓住了第一次渲染時(shí)的counter值,所以還需要在函數(shù)里加一個(gè)counterMutable變量來(lái)保存counter的狀態(tài)春宣,開(kāi)發(fā)心智負(fù)擔(dān)較大酵颁;Lightue的話像Vue一樣直接修改狀態(tài)就行,不過(guò)清理的函數(shù)需要加在返回的對(duì)象$cleanup內(nèi)月帝。

綁定元素屬性

  • Vue
<div id="bind-attribute">
  <span v-bind:title="message">
    鼠標(biāo)懸停幾秒鐘查看此處動(dòng)態(tài)綁定的提示信息躏惋!
  </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}>
      鼠標(biāo)懸停幾秒鐘查看此處動(dòng)態(tài)綁定的提示信息!
    </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,
      $$: '鼠標(biāo)懸停幾秒鐘查看此處動(dòng)態(tài)綁定的提示信息嚷辅!'
    })
  }

可以看到Vue通過(guò)v-bind指令或簡(jiǎn)單的冒號(hào)來(lái)標(biāo)明屬性綁定簿姨;React是用的jsx的花括號(hào)來(lái)進(jìn)行屬性綁定;Lightue通過(guò)一個(gè)狀態(tài)函數(shù)來(lái)建立屬性與狀態(tài)的關(guān)系簸搞。三者擁有不同的寫(xiě)法但是使用效果上沒(méi)有大的差異扁位。

未完待續(xù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市趁俊,隨后出現(xiàn)的幾起案子域仇,更是在濱河造成了極大的恐慌,老刑警劉巖则酝,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件殉簸,死亡現(xiàn)場(chǎng)離奇詭異闰集,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)般卑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)武鲁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蝠检,你說(shuō)我怎么就攤上這事沐鼠。” “怎么了叹谁?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵饲梭,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我焰檩,道長(zhǎng)憔涉,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任析苫,我火速辦了婚禮兜叨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘衩侥。我一直安慰自己国旷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布茫死。 她就那樣靜靜地躺著跪但,像睡著了一般。 火紅的嫁衣襯著肌膚如雪峦萎。 梳的紋絲不亂的頭發(fā)上屡久,一...
    開(kāi)封第一講書(shū)人閱讀 49,806評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音骨杂,去河邊找鬼涂身。 笑死雄卷,一個(gè)胖子當(dāng)著我的面吹牛搓蚪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播丁鹉,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼妒潭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了揣钦?” 一聲冷哼從身側(cè)響起雳灾,我...
    開(kāi)封第一講書(shū)人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎冯凹,沒(méi)想到半個(gè)月后谎亩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年匈庭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夫凸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡阱持,死狀恐怖夭拌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情衷咽,我是刑警寧澤鸽扁,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站镶骗,受9級(jí)特大地震影響桶现,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鼎姊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一巩那、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧此蜈,春花似錦即横、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至战授,卻和暖如春页藻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背植兰。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工份帐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人楣导。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓废境,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親筒繁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子噩凹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容