Heim > Web-Frontend > View.js > Hauptteil

Eine kurze Analyse zum Umgang mit Ausnahmen in dynamischen Vue3-Komponenten

青灯夜游
Freigeben: 2022-12-02 21:11:10
nach vorne
2848 Leute haben es durchsucht

Wie gehe ich mit Ausnahmen in dynamischen Vue3-Komponenten um? Im folgenden Artikel geht es um die Ausnahmebehandlungsmethoden für dynamische Vue3-Komponenten. Ich hoffe, dass er für alle hilfreich ist. 🔜 , B. beim Wechseln in Tabs:

// 动态路由
export const asyncRouterMap: Array<RouteRecordRaw> = [
  {
    path: &#39;/&#39;,
    name: &#39;index&#39;,
    meta: { title: &#39;首页&#39; },
    component: BasicLayout, // 引用了 BasicLayout 组件
    redirect: &#39;/welcome&#39;,
    children: [
      {
        path: &#39;welcome&#39;,
        name: &#39;Welcome&#39;,
        meta: { title: &#39;引导页&#39; },
        component: () => import(&#39;@/views/welcome.vue&#39;)
      },
      ...
    ]
  }
]
Nach dem Login kopieren
Eine kurze Analyse zum Umgang mit Ausnahmen in dynamischen Vue3-KomponentenDie Verwendung in vue2 verursacht keine weiteren Probleme, aber wenn Sie die Komponente in ein reaktionsfähiges Objekt einbinden, wird in vue3 eine Warnung angezeigt:

Vue hat eine Komponente erhalten, die war ein reaktives Objekt erstellt. Dies kann zu unnötigem Leistungsaufwand führen und sollte vermieden werden, indem die Komponente mit markiert wird Variablen fungieren als Proxy, aber unsere Komponente hat nach dem Proxying keine andere Verwendung. Um Leistungsaufwand zu sparen, empfiehlt Vue, den Proxy zu verwenden.

Die Lösung ist wie oben erwähnt, Sie müssen für die Verarbeitung flachRef oder markRaw verwenden: Für die Tabs-Verarbeitung:

    <el-tabs :model-value="copyTabName" type="card">
      <template v-for="item in tabList" :key="item.key || item.name">
        <el-tab-pane
          :name="item.key"
          :label="item.name"
          :disabled="item.disabled"
          :lazy="item.lazy || true"
        >
          <template #label>
            <span>
              <component v-if="item.icon" :is="item.icon" />
              {{ item.name }}
            </span>
          </template>
          // 关键在这里
          <component :key="item.key || item.name" :is="item.component" v-bind="item.props" />
        </el-tab-pane>
      </template>
    </el-tabs>
Nach dem Login kopieren

Für die dynamische Routing-Verarbeitung:

import { markRaw, ref } from &#39;vue&#39;

import A from &#39;./components/A.vue&#39;
import B from &#39;./components/B.vue&#39;

interface ComponentList {
  name: string
  component: Component
  // ...
}

const tab = ref<ComponentList[]>([{
    name: "组件 A",
    component: markRaw(A)
}, {
    name: "组件 B",
    component: markRaw(B)
}])
Nach dem Login kopieren
Für flachRef und markRaw besteht der Unterschied zwischen den beiden darin, dass flachRef Reagiert nur auf Wertänderungen, wie zum Beispiel:
import { markRaw } from &#39;vue&#39;

// 动态路由
export const asyncRouterMap: Array<RouteRecordRaw> = [
  {
    path: &#39;/&#39;,
    name: &#39;home&#39;,
    meta: { title: &#39;首页&#39; },
    component: markRaw(BasicLayout), // 使用 markRaw
    // ...
  }
]
Nach dem Login kopieren

Und markRaw markiert ein Objekt als nicht in einen Proxy konvertiert. Das Objekt selbst wird dann zurückgegeben.

const state = shallowRef({ count: 1 })

// 不会触发更改
state.value.count = 2

// 会触发更改
state.value = { count: 2 }
Nach dem Login kopieren
Sie können sehen, dass das von markRaw verarbeitete Objekt kein responsives Objekt mehr ist.

Für eine Komponente sollte es sich nicht um ein reaktionsfähiges Objekt handeln. Bei der Verarbeitung wird empfohlen, markRaw für die Verarbeitung zu verwenden.

(Teilen von Lernvideos:

Web-Frontend-Entwicklung, markRaw or using shallowRef instead of refEinfaches Programmiervideo)

Das obige ist der detaillierte Inhalt vonEine kurze Analyse zum Umgang mit Ausnahmen in dynamischen Vue3-Komponenten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:juejin.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage