主頁 > 企業開發 > 記錄-VUE中常用的4種高級方法

記錄-VUE中常用的4種高級方法

2023-05-07 08:51:33 企業開發

這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助

1. provide/inject

provide/inject 是 Vue.js 中用于跨組件傳遞資料的一種高級技術,它可以將資料注入到一個組件中,然后讓它的所有子孫組件都可以訪問到這個資料,通常情況下,我們在父組件中使用 provide 來提供資料,然后在子孫組件中使用 inject 來注入這個資料,

使用 provide/inject 的好處是可以讓我們在父組件和子孫組件之間傳遞資料,而無需手動進行繁瑣的 props 傳遞,它可以讓代碼更加簡潔和易于維護,但需要注意的是,provide/inject 的資料是非回應式的,這是因為provide/inject是一種更加底層的 API,它是基于依賴注入的方式來傳遞資料,而不是通過回應式系統來實作資料的更新和同步,

具體來說,provide方法提供的資料會被注入到子組件中的inject屬性中,但是這些資料不會自動觸發子組件的重新渲染,如果provide提供的資料發生了變化,子組件不會自動感知到這些變化并更新,

如果需要在子組件中使用provide/inject提供的資料,并且希望這些資料能夠回應式地更新,可以考慮使用Vue的回應式資料來代替provide/inject,例如,可以將資料定義在父組件中,并通過props將其傳遞給子組件,子組件再通過$emit來向父組件發送資料更新的事件,從而實作回應式的資料更新,

下面是一個簡單的例子,展示了如何在父組件中提供資料,并在子孫組件中注入這個資料:

<!-- 父組件 -->
<template>
  <div>
    <ChildComponent />
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  provide: {
    message: 'Hello from ParentComponent',
  },
  components: {
    ChildComponent,
  },
};
</script>

//上面provide還可以寫成函式形式
export default {
    provide(){
        return {
              message: this.message
        }
    }
}
<!-- 子組件 -->
<template>
  <div>
    <GrandchildComponent />
  </div>
</template>

<script>
import GrandchildComponent from './GrandchildComponent.vue';

export default {
  inject: ['message'],
  components: {
    GrandchildComponent,
  },
};
</script>
<!-- 孫子組件 -->
<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

<script>
export default {
  inject: ['message'],
};
</script>

在上面的例子中,父組件中提供了一個名為 message 的資料,子孫組件中都可以使用 inject 來注入這個資料,并在模板中使用它,注意,子孫組件中的 inject 選項中使用了一個陣列,陣列中包含了需要注入的屬性名,在這個例子中,我們只注入了一個 message 屬性,所以陣列中只有一個元素,

2. 自定義v-model

要使自定義的Vue組件支持v-model,需要實作一個名為value的prop和一個名為input的事件,在組件內部,將value prop 系結到組件的內部狀態,然后在對內部狀態進行修改時觸發input事件,

下面是一個簡單的例子,展示如何創建一個自定義的輸入框組件并支持v-model:

<template>
  <input :https://www.cnblogs.com/smileZAZ/archive/2023/05/06/value="value" @input="$emit('input', $event.target.value)" />
</template>

<script>
export default {
  name: 'MyInput',
  props: {
    value: String
  }
};
</script>
在上面的組件中,我們定義了一個value prop,這是與v-model系結的資料,我們還將內置的input事件轉發為一個自定義的input事件,并在事件處理程式中更新內部狀態,現在,我們可以在父組件中使用v-model來系結這個自定義組件的值,就像使用普通的輸入框一樣:
<template>
  <div>
    <my-input v-model="message" />
    <p>{{ message }}</p>
  </div>
</template>

<script>
import MyInput from './MyInput.vue';

export default {
  components: {
    MyInput
  },
  data() {
    return {
      message: ''
    };
  }
};
</script>

在上面的代碼中,我們通過使用v-model指令來雙向系結message資料和MyInput組件的值,當用戶在輸入框中輸入文本時,MyInput組件會觸發input事件,并將其更新的值發送給父組件,從而實作了雙向系結的效果,

3. 事件總線(EventBus)

Vue事件總線是一個事件處理機制,它可以讓組件之間進行通信,以便在應用程式中共享資訊,在Vue.js應用程式中,事件總線通常是一個全域實體,可以用來發送和接收事件,

以下是使用Vue事件總線的步驟:

3.1 創建一個全域Vue實體作為事件總線:

import Vue from 'vue';
export const eventBus = new Vue();

3.2 在需要發送事件的組件中,使用$emit方法觸發事件并傳遞資料:

eventBus.$emit('eventName', data);

3.3 在需要接收事件的組件中,使用$on方法監聽事件并處理資料:

eventBus.$on('eventName', (data) => {
  // 處理資料
});

需要注意的是,事件總線是全域的,所以在不同的組件中,需要保證事件名稱的唯一性,

另外,需要在組件銷毀前使用$off方法取消事件監聽:

eventBus.$off('eventName');

這樣就可以在Vue.js應用程式中使用事件總線來實作組件之間的通信了,

4. render方法

Vue 的 render 方法是用來渲染組件的函式,它可以用來替代模板語法,通過代碼的方式來生成 DOM 結構,相較于模板語法,render 方法具有更好的型別檢查和代碼提示,

下面詳細介紹 Vue 的 render 方法的使用方法:

4.1 基本語法

render 方法的基本語法如下:

render: function (createElement) {
  // 回傳一個 VNode
}

其中 createElement 是一個函式,它用來創建 VNode(虛擬節點),并回傳一個 VNode 物件,

4.2 創建 VNode

要創建 VNode,可以呼叫 createElement 函式,該函式接受三個引數:

  • 標簽名或組件名
  • 可選的屬性物件
  • 子節點陣列

例如,下面的代碼創建了一個包含文本節點的 div 元素:

render: function (createElement) {
  return createElement('div', 'Hello, world!')
}

如果要創建一個帶有子節點的元素,可以將子節點作為第三個引數傳遞給 createElement 函式,例如,下面的代碼創建了一個包含兩個子元素的 div 元素:

render: function (createElement) {
  return createElement('div', [
    createElement('h1', 'Hello'),
    createElement('p', 'World')
  ])
}

如果要給元素添加屬性,可以將屬性物件作為第二個引數傳遞給 createElement 函式,例如,下面的代碼創建了一個帶有樣式和事件處理程式的 button 元素:

render: function (createElement) {
  return createElement('button', {
    style: { backgroundColor: 'red' },
    on: {
      click: this.handleClick
    }
  }, 'Click me')
},
methods: {
  handleClick: function () {
    console.log('Button clicked')
  }
}

4.3 動態資料

render 方法可以根據組件的狀態動態生成內容,要在 render 方法中使用組件的資料,可以使用 this 關鍵字來訪問組件實體的屬性,例如,下面的代碼根據組件的狀態動態生成了一個帶有計數器的 div 元素:

render: function (createElement) {
  return createElement('div', [
    createElement('p', 'Count: ' + this.count),
    createElement('button', {
      on: {
        click: this.increment
      }
    }, 'Increment')
  ])
},
data: function () {
  return {
    count: 0
  }
},
methods: {
  increment: function () {
    this.count++
  }
}

4.4 JSX

在使用 Vue 的 render 方法時,也可以使用 JSX(JavaScript XML)語法,這樣可以更方便地撰寫模板,要使用 JSX,需要在組件中匯入 VuecreateElement 函式,并在 render 方法中使用 JSX 語法,例如,下面的代碼使用了 JSX 語法來創建一個計數器組件:

import Vue from 'vue'

export default {
    render() {
        return (
            <div>
                <p>Count:{this.count}</p>
                <button onClick={this.increment}>Increment</button>
            </div>
        )
    },
    data() {
        return { count: 0 }
    },
    methods: {
        increment() {
            this.count++
        }
    }
}

注意,在使用 JSX 時,需要使用 {} 包裹 JavaScript 運算式,

4.5 生成函式式組件

除了生成普通的組件,render 方法還可以生成函式式組件,函式式組件沒有狀態,只接收 props 作為輸入,并回傳一個 VNode,因為函式式組件沒有狀態,所以它們的性能比普通組件更高,

要生成函式式組件,可以在組件定義中將 functional 屬性設定為 true,例如,下面的代碼定義了一個函式式組件,用于顯示串列項:

export default {
  functional: true,
  props: ['item'],
  render: function (createElement, context) {
    return createElement('li', context.props.item);
  }
}
注意,在函式式組件中,props 作為第二個引數傳遞給 render 方法,

本文轉載于:

https://juejin.cn/post/7225921305597820985

如果對您有所幫助,歡迎您點個關注,我會定時更新技術檔案,大家一起討論學習,一起進步,

 

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

標籤:其他

上一篇:vue-router

下一篇:返回列表

標籤雲
其他(158585) Python(38118) JavaScript(25404) Java(18023) C(15222) 區塊鏈(8262) C#(7972) AI(7469) 爪哇(7425) MySQL(7165) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5871) 数组(5741) R(5409) Linux(5335) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4565) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2432) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1965) Web開發(1951) HtmlCss(1932) python-3.x(1918) 弹簧靴(1913) C++(1912) xml(1889) PostgreSQL(1874) .NETCore(1857) 谷歌表格(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
最新发布
  • 記錄-VUE中常用的4種高級方法

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 1. provide/inject provide/inject 是 Vue.js 中用于跨組件傳遞資料的一種高級技術,它可以將資料注入到一個組件中,然后讓它的所有子孫組件都可以訪問到這個資料。通常情況下,我們在父組件中使用 provid ......

    uj5u.com 2023-05-07 08:51:33 more
  • vue-router

    安裝 vue-router是一個vue的插件,用來實作前端的路由, 推薦使用 pnpm add vue-router@4 進行安裝。推薦配合vue3組合式api使用 基礎 從一個例子開始 <!-- App.vue檔案 --> <div id="app"> <h1>Hello App!</h1> <p ......

    uj5u.com 2023-05-07 08:51:28 more
  • el-upload組件問題 已解決

    前兩天我寫了一個上傳下載功能 使用<el-upload>組件 當后端將檔案流格式資料發送到回應里面前端屈接受的時候 ,我們使用 <el-upload> 組件里面的 :on-success 方法進行捕捉,使用blob進行檔案下載 檔案可以正常下載下來 但是打開檔案損壞 我去網上尋找答案, 但大多都是說 ......

    uj5u.com 2023-05-07 08:45:50 more
  • ArcToolBox-ArcGIS分析工具中英文對照及簡要介紹

    ArcGIS具有強大的分析工具箱,包括空間分析、空間統計、三維分析等,通過ArcGIS工具箱可以對空間資料進行各類操作、分析等,也可以用不同的工具制作GP模型進行發布使用。
    本文通過對ArcGIS工具箱(ArcToolBox)中工具的中英文對照及簡要說明,方便大家了解ArcGIS的各類工具,并對各類... ......

    uj5u.com 2023-05-07 08:36:10 more
  • 高精度地形DEM資料下載(NASA資料 12.5米解析度)

    本文介紹從NASA阿拉斯加衛星設備處網站下載高精度DEM資料,下載的資料精度是12.5米解析度。 目前國內大部分可以下載的dem資料都是30米或90米解析度的,對于更高精度的資料要不就是需要付費下載,要不就是涉密資料無法獲取。 下載地址:https://vertex.daac.asf.alaska. ......

    uj5u.com 2023-05-07 08:26:21 more
  • Three.js 進階之旅:頁面平滑滾動-王國之淚 &#128167;

    本文使用 React + Three.js + React Three Fiber 技術堆疊,實作一個《塞爾達傳說:王國之淚》主題風格基于滾動控制的平滑滾動圖片展示頁面。通過本文的閱讀,你將學習到的知識點包括:了解 R3F 中 useFrame hook 及 useThree hook 基本原理及用法... ......

    uj5u.com 2023-05-06 09:02:35 more
  • Three.js 進階之旅:頁面平滑滾動-王國之淚 &#128167;

    本文使用 React + Three.js + React Three Fiber 技術堆疊,實作一個《塞爾達傳說:王國之淚》主題風格基于滾動控制的平滑滾動圖片展示頁面。通過本文的閱讀,你將學習到的知識點包括:了解 R3F 中 useFrame hook 及 useThree hook 基本原理及用法... ......

    uj5u.com 2023-05-06 08:55:46 more
  • 記錄-Symbol學習筆記

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 Symbol是JavaScript中的原始資料型別之一,它表示一個唯一的、不可變的值,通常用作物件屬性的鍵值。由于Symbol值是唯一的,因此可以防止物件屬性被意外地覆寫或修改。以下是Symbol的方法和屬性整理: 屬性 Symbol.l ......

    uj5u.com 2023-05-06 08:15:46 more
  • Vue3專案(Vite+TS)使用Web Serial Api全記錄

    前言 之前寫了一個vue+django的一個通過串口控制的上位機系統。但是實際生產中,不如部署到服務器上,這樣可以更好的節約成本。但是這樣就需要弄一個客戶端來控制處理串口資訊。那我就在想能不能通過網頁直接拿到客戶端的串口資訊。所以問了萬能的chatgpt,得到了以下答案: 是的,前端可以使用 Web ......

    uj5u.com 2023-05-06 08:15:40 more
  • HTML5中的document.visibilityState

    在 HTML5 中,檔案物件(即 document 物件)具有一個 visibilityState 屬性,該屬性表示當前檔案物件的可見性狀態。 visibilityState 可能的取值有以下三種: - visible :表示檔案當前處于激活狀態,即當前選項卡處于前臺或當前視窗處于螢屏最上層。- h ......

    uj5u.com 2023-05-06 08:15:36 more