主頁 > 企業開發 > vue中8種組件通信方式, 值得收藏!

vue中8種組件通信方式, 值得收藏!

2020-09-16 02:00:51 企業開發

vue是資料驅動視圖更新的框架, 所以對于vue來說組件間的資料通信非常重要,那么組件之間如何進行資料通信的呢? 首先我們需要知道在vue中組件之間存在什么樣的關系, 才更容易理解他們的通信方式, 就好像過年回家,坐著一屋子的陌生人,相互之間怎么稱呼,這時就需要先知道自己和他們之間是什么樣的關系, vue組件中關系說明:

image

 

如上圖所示, A與B、A與C、B與D、C與E組件之間是父子關系; B與C之間是兄弟關系;A與D、A與E之間是隔代關系; D與E是堂兄關系(非直系親屬) 針對以上關系我們歸類為:

  • 父子組件之間通信

  • 非父子組件之間通信(兄弟組件、隔代關系組件等)

本文會介紹組件間通信的8種方式如下圖目錄所示:并介紹在不同的場景下如何選擇有效方式實作的組件間通信方式,希望可以幫助小伙伴們更好理解組件間的通信,

img

 

一、props / $emit

父組件通過props的方式向子組件傳遞資料,而通過$emit 子組件可以向父組件通信,

1. 父組件向子組件傳值

下面通過一個例子說明父組件如何向子組件傳遞資料:在子組件article.vue中如何獲取父組件section.vue中的資料articles:['紅樓夢', '西游記','三國演義']

 // section父組件
 <template>
   <div class="section">
     <com-article :articles="articleList"></com-article>
   </div>
 </template>
 ?
 <script>
 import comArticle from './test/article.vue'
 export default {
   name: 'HelloWorld',
   components: { comArticle },
   data() {
     return {
       articleList: ['紅樓夢', '西游記', '三國演義']
    }
  }
 }
 </script>
 ?
 復制代碼
 // 子組件 article.vue
 <template>
   <div>
     <span v-for="(item, index) in articles" :key="index">{{item}}</span>
   </div>
 </template>
 ?
 <script>
 export default {
   props: ['articles']
 }
 </script>

總結: prop 只可以從上一級組件傳遞到下一級組件(父子組件),即所謂的單向資料流,而且 prop 只讀,不可被修改,所有修改都會失效并警告,

2. 子組件向父組件傳值

對于$emit 我自己的理解是這樣的: $emit系結一個自定義事件, 當這個陳述句被執行時, 就會將引數arg傳遞給父組件,父組件通過v-on監聽并接收引數, 通過一個例子,說明子組件如何向父組件傳遞資料, 在上個例子的基礎上, 點擊頁面渲染出來的ariticleitem, 父組件中顯示在陣列中的下標

 // 父組件中
 <template>
   <div class="section">
     <com-article :articles="articleList" @onEmitIndex="onEmitIndex"></com-article>
     <p>{{currentIndex}}</p>
   </div>
 </template>
 ?
 <script>
 import comArticle from './test/article.vue'
 export default {
   name: 'HelloWorld',
   components: { comArticle },
   data() {
     return {
       currentIndex: -1,
       articleList: ['紅樓夢', '西游記', '三國演義']
    }
  },
   methods: {
     onEmitIndex(idx) {
       this.currentIndex = idx
    }
  }
 }
 </script>
 <template>
   <div>
     <div v-for="(item, index) in articles" :key="index" @click="emitIndex(index)">{{item}}</div>
   </div>
 </template>
 ?
 <script>
 export default {
   props: ['articles'],
   methods: {
     emitIndex(index) {
       this.$emit('onEmitIndex', index)
    }
  }
 }
 </script>

二、 $children / $parent

 

image

上面這張圖片是vue``$parent``$children``data

 

使用方法

 // 父組件中
 <template>
   <div class="hello_world">
     <div>{{msg}}</div>
     <com-a></com-a>
     <button @click="changeA">點擊改變子組件值</button>
   </div>
 </template>
 ?
 <script>
 import ComA from './test/comA.vue'
 export default {
   name: 'HelloWorld',
   components: { ComA },
   data() {
     return {
       msg: 'Welcome'
    }
  },
 ?
   methods: {
     changeA() {
       // 獲取到子組件A
       this.$children[0].messageA = 'this is new value'
    }
  }
 }
 </script>
 復制代碼
 // 子組件中
 <template>
   <div class="com_a">
     <span>{{messageA}}</span>
     <p>獲取父組件的值為: {{parentVal}}</p>
   </div>
 </template>
 ?
 <script>
 export default {
   data() {
     return {
       messageA: 'this is old'
    }
  },
   computed:{
     parentVal(){
       return this.$parent.msg;
    }
  }
 }
 </script>

要注意邊界情況,如在#app上拿$parent得到的是new Vue()的實體,在這實體上再拿$parent得到的是undefined,而在最底層的子組件拿$children是個空陣列,也要注意得到$parent$children的值不一樣,$children 的值是陣列,而$parent是個物件

總結

上面兩種方式用于父子組件之間的通信, 而使用props進行父子組件通信更加普遍; 二者皆不能用于非父子組件之間的通信,

三、provide/ inject

概念:

provide/ injectvue2.2.0新增的api, 簡單來說就是父組件中通過provide來提供變數, 然后再子組件中通過inject來注入變數,

注意: 這里不論子組件嵌套有多深, 只要呼叫了inject 那么就可以注入provide中的資料,而不局限于只能從當前父組件的props屬性中回去資料

舉例驗證

接下來就用一個例子來驗證上面的描述: 假設有三個組件: A.vue、B.vue、C.vue 其中 C是B的子組件,B是A的子組件

 // A.vue
 ?
 <template>
   <div>
  <comB></comB>
   </div>
 </template>
 ?
 <script>
   import comB from '../components/test/comB.vue'
   export default {
     name: "A",
     provide: {
       for: "demo"
    },
     components:{
       comB
    }
  }
 </script>
 復制代碼
 // B.vue
 ?
 <template>
   <div>
    {{demo}}
     <comC></comC>
   </div>
 </template>
 ?
 <script>
   import comC from '../components/test/comC.vue'
   export default {
     name: "B",
     inject: ['for'],
     data() {
       return {
         demo: this.for
      }
    },
     components: {
       comC
    }
  }
 </script>
 復制代碼
 // C.vue
 <template>
   <div>
    {{demo}}
   </div>
 </template>
 ?
 <script>
   export default {
     name: "C",
     inject: ['for'],
     data() {
       return {
         demo: this.for
      }
    }
  }
 </script>

四、ref / refs

ref:如果在普通的 DOM 元素上使用,參考指向的就是 DOM 元素;如果用在子組件上,參考就指向組件實體,可以通過實體直接呼叫組件的方法或訪問資料, 我們看一個ref 來訪問組件的例子:

 // 子組件 A.vue
 ?
 export default {
   data () {
     return {
       name: 'Vue.js'
    }
  },
   methods: {
     sayHello () {
       console.log('hello')
    }
  }
 }
 復制代碼
 // 父組件 app.vue
 ?
 <template>
   <component-a ref="comA"></component-a>
 </template>
 <script>
   export default {
     mounted () {
       const comA = this.$refs.comA;
       console.log(comA.name);  // Vue.js
       comA.sayHello();  // hello
    }
  }
 </script>

五、eventBus

eventBus 又稱為事件總線,在vue中可以使用它來作為溝通橋梁的概念, 就像是所有組件共用相同的事件中心,可以向該中心注冊發送事件或接收事件, 所以組件都可以通知其他組件,

eventBus也有不方便之處, 當專案較大,就容易造成難以維護的災難

在Vue的專案中怎么使用eventBus來實作組件之間的資料通信呢?具體通過下面幾個步驟

1. 初始化

首先需要創建一個事件總線并將其匯出, 以便其他模塊可以使用或者監聽它.

 // event-bus.js
 ?
 import Vue from 'vue'
 export const EventBus = new Vue()

2. 發送事件

假設你有兩個組件: additionNumshowNum, 這兩個組件可以是兄弟組件也可以是父子組件;這里我們以兄弟組件為例:

 <template>
   <div>
     <show-num-com></show-num-com>
     <addition-num-com></addition-num-com>
   </div>
 </template>
 ?
 <script>
 import showNumCom from './showNum.vue'
 import additionNumCom from './additionNum.vue'
 export default {
   components: { showNumCom, additionNumCom }
 }
 </script>
 ?
 復制代碼
 // addtionNum.vue 中發送事件
 ?
 <template>
   <div>
     <button @click="additionHandle">+加法器</button>    
   </div>
 </template>
 ?
 <script>
 import {EventBus} from './event-bus.js'
 console.log(EventBus)
 export default {
   data(){
     return{
       num:1
    }
  },
 ?
   methods:{
     additionHandle(){
       EventBus.$emit('addition', {
         num:this.num++
      })
    }
  }
 }
 </script>

3. 接收事件

 // showNum.vue 中接收事件
 ?
 <template>
   <div>計算和: {{count}}</div>
 </template>
 ?
 <script>
 import { EventBus } from './event-bus.js'
 export default {
   data() {
     return {
       count: 0
    }
  },
 ?
   mounted() {
     EventBus.$on('addition', param => {
       this.count = this.count + param.num;
    })
  }
 }
 </script>

這樣就實作了在組件addtionNum.vue中點擊相加按鈕, 在showNum.vue中利用傳遞來的 num 展示求和的結果.

4. 移除事件監聽者

如果想移除事件的監聽, 可以像下面這樣操作:

 import { eventBus } from 'event-bus.js'
 EventBus.$off('addition', {})

六、Vuex

1. Vuex介紹

Vuex 是一個專為 Vue.js 應用程式開發的狀態管理模式,它采用集中式存盤管理應用的所有組件的狀態,并以相應的規則保證狀態以一種可預測的方式發生變化. Vuex 解決了多個視圖依賴于同一狀態來自不同視圖的行為需要變更同一狀態的問題,將開發者的精力聚焦于資料的更新而不是資料在組件之間的傳遞上

2. Vuex各個模塊

  1. state:用于資料的存盤,是store中的唯一資料源

  2. getters:如vue中的計算屬性一樣,基于state資料的二次包裝,常用于資料的篩選和多個資料的相關性計算

  3. mutations:類似函式,改變state資料的唯一途徑,且不能用于處理異步事件

  4. actions:類似于mutation,用于提交mutation來改變狀態,而不直接變更狀態,可以包含任意異步操作

  5. modules:類似于命名空間,用于專案中將各個模塊的狀態分開定義和操作,便于維護

3. Vuex實體應用

 // 父組件
 ?
 <template>
   <div id="app">
     <ChildA/>
     <ChildB/>
   </div>
 </template>
 ?
 <script>
   import ChildA from './components/ChildA' // 匯入A組件
   import ChildB from './components/ChildB' // 匯入B組件
 ?
   export default {
     name: 'App',
     components: {ChildA, ChildB} // 注冊A、B組件
  }
 </script>
 復制代碼
 // 子組件childA
 ?
 <template>
   <div id="childA">
     <h1>我是A組件</h1>
     <button @click="transform">點我讓B組件接收到資料</button>
     <p>因為你點了B,所以我的資訊發生了變化:{{BMessage}}</p>
   </div>
 </template>
 ?
 <script>
   export default {
     data() {
       return {
         AMessage: 'Hello,B組件,我是A組件'
      }
    },
     computed: {
       BMessage() {
         // 這里存盤從store里獲取的B組件的資料
         return this.$store.state.BMsg
      }
    },
     methods: {
       transform() {
         // 觸發receiveAMsg,將A組件的資料存放到store里去
         this.$store.commit('receiveAMsg', {
           AMsg: this.AMessage
        })
      }
    }
  }
 </script>
 復制代碼
 // 子組件 childB
 ?
 <template>
   <div id="childB">
     <h1>我是B組件</h1>
     <button @click="transform">點我讓A組件接收到資料</button>
     <p>因為你點了A,所以我的資訊發生了變化:{{AMessage}}</p>
   </div>
 </template>
 ?
 <script>
   export default {
     data() {
       return {
         BMessage: 'Hello,A組件,我是B組件'
      }
    },
     computed: {
       AMessage() {
         // 這里存盤從store里獲取的A組件的資料
         return this.$store.state.AMsg
      }
    },
     methods: {
       transform() {
         // 觸發receiveBMsg,將B組件的資料存放到store里去
         this.$store.commit('receiveBMsg', {
           BMsg: this.BMessage
        })
      }
    }
  }
 </script>

vuex的store,js

 import Vue from 'vue'
 import Vuex from 'vuex'
 Vue.use(Vuex)
 const state = {
   // 初始化A和B組件的資料,等待獲取
   AMsg: '',
   BMsg: ''
 }
 ?
 const mutations = {
   receiveAMsg(state, payload) {
     // 將A組件的資料存放于state
     state.AMsg = payload.AMsg
  },
   receiveBMsg(state, payload) {
     // 將B組件的資料存放于state
     state.BMsg = payload.BMsg
  }
 }
 ?
 export default new Vuex.Store({
   state,
   mutations
 })

七、localStorage / sessionStorage

這種通信比較簡單,缺點是資料和狀態比較混亂,不太容易維護, 通過window.localStorage.getItem(key)獲取資料 通過window.localStorage.setItem(key,value)存盤資料

注意用JSON.parse() / JSON.stringify() 做資料格式轉換 localStorage / sessionStorage可以結合vuex, 實作資料的持久保存,同時使用vuex解決資料和狀態混亂問題.

$attrs$listeners

現在我們來討論一種情況, 我們一開始給出的組件關系圖中A組件與D組件是隔代關系, 那它們之前進行通信有哪些方式呢?

  1. 使用props系結來進行一級一級的資訊傳遞, 如果D組件中狀態改變需要傳遞資料給A, 使用事件系統一級級往上傳遞

  2. 使用eventBus,這種情況下還是比較適合使用, 但是碰到多人合作開發時, 代碼維護性較低, 可讀性也低

  3. 使用Vuex來進行資料管理, 但是如果僅僅是傳遞資料, 而不做中間處理,使用Vuex處理感覺有點大材小用了.

vue2.4中,為了解決該需求,引入了$attrs$listeners , 新增了inheritAttrs 選項, 在版本2.4以前,默認情況下,父作用域中不作為 prop 被識別 (且獲取) 的特性系結 (class 和 style 除外),將會“回退”且作為普通的HTML特性應用在子組件的根元素上,接下來看一個跨級通信的例子:

 // app.vue
 // index.vue
 ?
 <template>
   <div>
     <child-com1
      :name="name"
      :age="age"
      :gender="gender"
      :height="height"
       title="程式員成長指北"
     ></child-com1>
   </div>
 </template>
 <script>
 const childCom1 = () => import("./childCom1.vue");
 export default {
   components: { childCom1 },
   data() {
     return {
       name: "zhang",
       age: "18",
       gender: "女",
       height: "158"
    };
  }
 };
 </script>
 復制代碼
 // childCom1.vue
 ?
 <template class="border">
   <div>
     <p>name: {{ name}}</p>
     <p>childCom1的$attrs: {{ $attrs }}</p>
     <child-com2 v-bind="$attrs"></child-com2>
   </div>
 </template>
 <script>
 const childCom2 = () => import("./childCom2.vue");
 export default {
   components: {
     childCom2
  },
   inheritAttrs: false, // 可以關閉自動掛載到組件根元素上的沒有在props宣告的屬性
   props: {
     name: String // name作為props屬性系結
  },
   created() {
     console.log(this.$attrs);
      // { "age": "18", "gender": "女", "height": "158", "title": "程式員成長指北" }
  }
 };
 </script>
 復制代碼
 // childCom2.vue
 ?
 <template>
   <div class="border">
     <p>age: {{ age}}</p>
     <p>childCom2: {{ $attrs }}</p>
   </div>
 </template>
 <script>
 ?
 export default {
   inheritAttrs: false,
   props: {
     age: String
  },
   created() {
     console.log(this.$attrs);
     // { "gender": "女", "height": "158", "title": "程式員成長指北" }
  }
 };
 </script>

總結

常見使用場景可以分為三類:

  • 父子組件通信: props; $parent / $children; provide / inject ; ref ; $attrs / $listeners

  • 兄弟組件通信: eventBus ; vuex

  • 跨級通信: eventBus;Vuex;provide / inject$attrs / $listeners

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/51746.html

標籤:JavaScript

上一篇:讓你減少加班的15條高效JS技巧!記得收藏哦

下一篇:javascript基礎型別和參考型別

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more