為什麼需要Web Component? (2)

tags: Web HTML5 JavaScript Vue React
category: Front-End
description: 為什麼需要web component? 第二篇,額外用vue與react當作範例。
created_at: 2021/06/29 23:00:00

cover image

繼上一篇 Web Component,已經大概知道怎麼實作了

但真的要做的時候你應該選擇使用像是 VueReactAngular 這種前端框架來幫助你。

而這篇主要會拿 Vue 和 React 當範例,也沒有要讓 Vue 與 React 來場神仙打架,只是單純當範例看看

來做一樣的小練習,做兩個按鈕分別可以遞增遞減數字

我們先來看看Vue的版本

HTML一樣的單純

<div id="app">
  <app-counter></app-counter>
  <app-counter></app-counter>
  <app-counter></app-counter>
</div>

JavaScript明顯簡潔很多

const app = new Vue({
  el: '#app',
  components: {
    'app-counter': {
      data: function () {
        return {
          count: 0
        }
      },
      template: `
        <div>
          <button @click="count--">-</button>
          <span>{{ count }}</span>
          <button @click="count++">+</button>
        </div>
      `
    }
  }
})

稍微做一點點解釋,Vue基本上就是管好你的 Vue 物件

  • el: 設定 root 元素,在那個元素裡面才有 Vue 的效果
  • components: 這個Vue元素裡面有的元件,key是標籤,value又是一個vue物件
  • data: 這個元件的資料
  • template: 這個元件要渲染的template
  • @click: click事件
  • { { count } }: 輸出 count data

再來我們看看 React

一樣首先先看看 HTML

<div id="root"></div>

你沒看錯,就是只有一個東西

function ButtonCounter(props){
  const [count, setCount] = React.useState(0)

  return (
    <div>
      <button onClick={() => setCount(count - 1)}>-</button>
      <span>{count}</span>
      <button onClick={() => setCount(count + 1)}>+</button>
    </div>
  )
}

ReactDOM.render(
  <React.Fragment>
      <ButtonCounter />
      <ButtonCounter />
      <ButtonCounter />
  </React.Fragment>,
  document.getElementById('root')
);

在 JavaScript 的部分也是精簡很多,一樣稍微解釋一下

  • ReactDOM.render(JSX, DOM): 前面寫的是類似 HTML 的 JSX 語法,只能有一個標籤當root,而想擺多個又不想擺一個沒用的div就會使用React.Fragment,類似於 Vue 的 <template>
  • React.useState(initValue): 回傳兩個值,一個是初始值,一個是改變那個初始值的函數。
  • onClick: click事件
  • { }: 裡面寫 JavaScript 表達式

這兩個東西簡單粗略分類一下

  • 選擇Vue: 如果你喜歡寫物件
  • 選擇React: 如果你喜歡寫函數

... 那Angular呢,我們以後再談




最後更新時間: 2021年06月29日.