最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue3 provide與inject的使用小技巧分享

 更新時(shí)間:2022年04月18日 16:14:40   作者:原諒我不夠?yàn)⒚? 
這篇文章主要介紹了vue3 provide與inject的使用小技巧,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

vue3 provide與inject使用技巧

主要使用來溝通上下文,比如父——子——子1——子2,父組件和子2組件間的通信,不使用這方法也能解決的方式還有兩種

  • props $emit 一層一層的傳 弊端:寫著太麻煩
  • vuex 用多了性能就不太行了

進(jìn)入正題

官方文檔上只提供了傳遞值的方式,沒有提供子組件去跨級(jí)改父級(jí)組件的值,但是可以換一種寫法就可以了,直接代碼

代碼結(jié)構(gòu): 父組件——child組件——son組件

父組件

<template>
? <div class="text">盒子 {{state.name}}</div>
? <div class="box">
? ?<Child/>
? </div>
</template>
<script lang="ts">
import { defineComponent, ref, reactive, provide } from 'vue'
import Child from './components/child.vue'
export default defineComponent({
? components:{
? ? Child
? },
? setup() {
? ? const state: any = reactive({
? ? ? name: 'zlz',
? ? ? age: 24
? ? })
? ? const update = (key: string, val: any): void => {
? ? ? state[key] = val
? ? }
? ? provide('ref2', {
? ? ? val: state, ?// val需要傳遞的值
? ? ? update // 更新傳遞的值的方法
? ? })
? ? return {
? ? ? state
? ? }
? }
})
</script>

ps: 當(dāng)然也可以換一種寫法 這一種寫法要簡(jiǎn)便一點(diǎn) 但是語義化更弱 

const state: any = reactive({
? name: 'zlz',
? age: 24,
? update // 更新state的方法
})
provide('ref2', state)

child組件

<template>
? <div class="box">
? ? <div class="box">child組件</div>
? ? <Son/>
? </div>
</template>
<script>
import { defineComponent, reactive, toRaw } from 'vue'
import Son from './son.vue'
export default defineComponent({
? components:{
? ? Son
? },
? setup() {
? }
})
</script>

son組件

<template>
? <div class="box">
? ? son組件 {{ref2.val.age}}
? </div>
? <button @click="handleClick">
? ? 子組件點(diǎn)擊
? </button>
</template>
<script>
import { inject } from 'vue'
export default {
? setup() {
? ? const ref2 = inject('ref2')
? ? const handleClick = () => {
? ? ? const key = 'age'
? ? ? ref2.update(key, 111) // 調(diào)用傳遞下來的方法去更新父組件的值
? ? }
? ? return {
? ? ? ref2,
? ? ? handleClick
? ? }
? }
}
</script>

vue3的一些實(shí)用技巧

v-for 和 v-if 不要一起使用(Vue2)

此優(yōu)化技巧僅限于Vue2,Vue3 中對(duì) v-for 和 v-if 的優(yōu)先級(jí)做了調(diào)整,

永遠(yuǎn)不要把 v-if 和 v-for 同時(shí)用在同一個(gè)元素上

原因是 v-for 的 優(yōu)先級(jí)高于 v-if,所以當(dāng)它們使用再同一個(gè)標(biāo)簽上是,每一個(gè)渲染都會(huì)先循環(huán)再進(jìn)行條件判斷

注意: Vue3 中 v-if 優(yōu)先級(jí)高于 v-for,所以當(dāng) v-for 和 v-if 一起使用時(shí)效果類似于 Vue2 中把 v-if 上提的效果

例如下面這段代碼在 Vue2 中是不被推薦的,Vue 也會(huì)給出對(duì)應(yīng)的警告

<ul>
? <li v-for="user in users" v-if="user.active">
? ? {{ user.name }}
? </li>
</ul>

我們應(yīng)該盡量將 v-if 移動(dòng)到上級(jí) 或者 使用 計(jì)算屬性來處理數(shù)據(jù)

<ul v-if="active">
? <li v-for="user in users">
? ? {{ user.name }}
? </li>
</ul>

如果你不想讓循環(huán)的內(nèi)容多出一個(gè)無需有的上級(jí)容器,那么你可以選擇使用 template 來作為其父元素,template 不會(huì)被瀏覽器渲染為 DOM 節(jié)點(diǎn)

如果我想要判斷遍歷對(duì)象里面每一項(xiàng)的內(nèi)容來選擇渲染的數(shù)據(jù)的話,可以使用 computed 來對(duì)遍歷對(duì)象進(jìn)行過濾

// js
let usersActive = computed(()=>users.filter(user => user.active))
// template
<ul>
? ? <li v-for="user in usersActive">
? ? ? {{ user.name }}
? ? </li>
</ul>

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue數(shù)據(jù)雙向綁定原理及簡(jiǎn)單實(shí)現(xiàn)方法

    Vue數(shù)據(jù)雙向綁定原理及簡(jiǎn)單實(shí)現(xiàn)方法

    vue數(shù)據(jù)雙向綁定是通過數(shù)據(jù)劫持結(jié)合發(fā)布者-訂閱者模式的方式來實(shí)現(xiàn)的.本文重點(diǎn)給大家介紹Vue數(shù)據(jù)雙向綁定原理及簡(jiǎn)單實(shí)現(xiàn)方法,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-05-05
  • Vue中圖片Src使用變量的方法

    Vue中圖片Src使用變量的方法

    這篇文章主要介紹了Vue中圖片Src使用變量的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Vue 中可以定義組件模版的幾種方式

    Vue 中可以定義組件模版的幾種方式

    這篇文章主要介紹了Vue 中可以定義組件模版的幾種方式以及他們之間的一些差別,需要的朋友可以參考下
    2019-08-08
  • Echart圖表在項(xiàng)目中的前后端使用詳解

    Echart圖表在項(xiàng)目中的前后端使用詳解

    圖表在我們的項(xiàng)目中可以幫我們很明確的看到我們想要看到的數(shù)據(jù),本文將主要介紹Echart圖表在項(xiàng)目中前后端使用的詳細(xì)教程,感興趣的同學(xué)可以學(xué)習(xí)一下
    2021-11-11
  • vite構(gòu)建項(xiàng)目并支持微前端

    vite構(gòu)建項(xiàng)目并支持微前端

    本文主要介紹了vite構(gòu)建項(xiàng)目并支持微前端,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • vue webpack重寫cookie路徑的方法

    vue webpack重寫cookie路徑的方法

    webpack提供的反向代理服務(wù)器在開發(fā)階段非常方便,幾行簡(jiǎn)單的代碼配置就可以使用反向代理功能,包括路徑重寫、cookie處理等。這篇文章主要介紹了vue webpack重寫cookie路徑,需要的朋友可以參考下
    2019-07-07
  • Vue結(jié)合openlayers按照經(jīng)緯度坐標(biāo)實(shí)現(xiàn)錨地標(biāo)記及繪制多邊形區(qū)域

    Vue結(jié)合openlayers按照經(jīng)緯度坐標(biāo)實(shí)現(xiàn)錨地標(biāo)記及繪制多邊形區(qū)域

    OpenLayers是一個(gè)用于開發(fā)WebGIS客戶端的JavaScript包,最初基于BSD許可發(fā)行。OpenLayers是一個(gè)開源的項(xiàng)目,其設(shè)計(jì)之意是為互聯(lián)網(wǎng)客戶端提供強(qiáng)大的地圖展示功能,包括地圖數(shù)據(jù)顯示與相關(guān)操作,并具有靈活的擴(kuò)展機(jī)制
    2022-09-09
  • Vue history模式刷新頁面404問題及解決

    Vue history模式刷新頁面404問題及解決

    文章介紹了Vue單頁應(yīng)用中出現(xiàn)404錯(cuò)誤的原因,以及如何通過配置Nginx和使用Vue Router的hash模式來解決這個(gè)問題,同時(shí),文章還簡(jiǎn)要解釋了單頁應(yīng)用的概念及其優(yōu)點(diǎn)和缺點(diǎn),并討論了Router的實(shí)現(xiàn)方式
    2024-12-12
  • vue2中如何使用swiper@5.4.5

    vue2中如何使用swiper@5.4.5

    這篇文章主要介紹了vue2中如何使用swiper@5.4.5問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • iview form清除校驗(yàn)狀態(tài)的實(shí)現(xiàn)

    iview form清除校驗(yàn)狀態(tài)的實(shí)現(xiàn)

    這篇文章主要介紹了iview form清除校驗(yàn)狀態(tài)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評(píng)論

龙胜| 阿坝| 唐山市| 丰台区| 高安市| 伊金霍洛旗| 乌拉特中旗| 舒城县| 白城市| 吕梁市| 基隆市| 宁都县| 清水河县| 郯城县| 五台县| 曲阳县| 新沂市| 西贡区| 邮箱| 新巴尔虎右旗| 淮北市| 行唐县| 东平县| 龙岩市| 北川| 冕宁县| 奉节县| 乌鲁木齐市| 勐海县| 沐川县| 玛曲县| 云阳县| 彭阳县| 清远市| 凤山市| 舟山市| 大埔县| 呼和浩特市| 宜城市| 临海市| 德清县|