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

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

體積 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)建一個Counter組件,然后將其用作根組件并掛載到#root元素上,不過我們可以看出它們的一些區(qū)別:Vue的組件是一個選項對象,而React的組件是一個渲染函數(shù),Lightue的則是一個產(chǎn)生VDomSrc的工廠函數(shù),且Lightue中習(xí)慣將Lightue縮寫為L,將狀態(tài)縮寫為S。Vue的根組件可以不聲明模板而是使用被掛載節(jié)點的內(nèi)容作為模板;React使用jsx的方式來混寫模板;Lightue則是用返回的VDomSrc對象作為模板。

開始計數(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),
    ...
}

添加計數(shù)方法,可以看到Vue每次都需要用this去訪問數(shù)據(jù)和方法,略顯不便,不過在Vue3中,添加了setup和ref改進了這點;React如果直接在useEffect里面使用setInterval修改counter的話,會發(fā)現(xiàn)計數(shù)到1就不增長了,這是因為useEffect無依賴所以只執(zhí)行了一次,只抓住了第一次渲染時的counter值,所以還需要在函數(shù)里加一個counterMutable變量來保存counter的狀態(tài),開發(fā)心智負擔較大;Lightue的話像Vue一樣直接修改狀態(tài)就行,不過清理的函數(shù)需要加在返回的對象$cleanup內(nèi)。

綁定元素屬性

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

可以看到Vue通過v-bind指令或簡單的冒號來標明屬性綁定;React是用的jsx的花括號來進行屬性綁定;Lightue通過一個狀態(tài)函數(shù)來建立屬性與狀態(tài)的關(guān)系。三者擁有不同的寫法但是使用效果上沒有大的差異。

未完待續(xù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 unpkg是一個前端常用的公共CDN,它通過URL語法完成了別人web界面內(nèi)才能達到的效果,簡潔而優(yōu)雅,在流...
    無腳鳥30閱讀 11,028評論 1 8
  • 前言:非常鐘情ant pro所以想著把react先入門了,之前了解過vue,所以繼續(xù)加油 js下載 https:/...
    江江簡書閱讀 180評論 0 0
  • 一、FLow類型檢測 安裝Flownpm install flow-bin 初始化flow項目flow init ...
    zackxizi閱讀 659評論 1 1
  • Vue -漸進式JavaScript框架 介紹 vue 中文網(wǎng) vue github Vue.js 是一套構(gòu)建用戶...
    桂_3d6b閱讀 947評論 0 0
  • 本文是本人正式開始學(xué)習(xí)webpack的記錄文檔,時間:2020-05-16,webpack版本:"webpack"...
    Mstian閱讀 734評論 0 5

友情鏈接更多精彩內(nèi)容