ホームページ  >  記事  >  ウェブフロントエンド  >  vue コンポーネントの 3 つの API (prop、slot、event) についての深い理解

vue コンポーネントの 3 つの API (prop、slot、event) についての深い理解

青灯夜游
青灯夜游転載
2021-11-23 19:14:062284ブラウズ

コンポーネントがどれほど複雑であっても、コンポーネントはプロップ、イベント、スロットで構成されている必要があります。次の記事では、vue コンポーネントの prop、slot、event を理解し、これら 3 つの API を記述する方法について説明します。

vue コンポーネントの 3 つの API (prop、slot、event) についての深い理解

質問の紹介

次のようなシナリオに遭遇したことはありますか: 開発中に、特に一般的な表示や関数に遭遇し、それらを抽出してカプセル化したいと考えています。他の開発者が使用するために共有される独立したコンポーネント。

コンポーネントをカプセル化するには、まずコンポーネントの基本構成を理解します。コンポーネントがどれほど複雑であっても、コンポーネントはプロップ、イベント、スロットで構成されている必要があります。コンポーネントを作成するプロセスは、これら 3 つの API を設計するプロセスです。同様に、他の人が作成したコンポーネントを読みたい場合も、これら 3 つの API を使用してコンポーネントをすばやく理解することができます。 [関連する推奨事項: "vue.js チュートリアル "]

では、prop、event、slot という 3 つの API をどのように記述すればよいでしょうか?

プロパティ prop

prop は、コンポーネントが受け入れることができるプロパティを定義するために使用されます。

vue の公式 Web サイトを読むと、prop は配列またはオブジェクトで記述できることがわかります。便宜上、厳密ではない prop の配列記述メソッドを直接使用する人が多いですが、一般的なコンポーネントを記述する場合は、できる限り prop のオブジェクト記述メソッドを使用する必要があります。

次のコードが表示されます:

app.component('my-component', {
  props: {
    // 基础的类型检查 (`null` 和 `undefined` 会通过任何类型验证)
    propA: Number,
    // 多个可能的类型
    propB: [String, Number],
    // 必填的字符串
    propC: {
      type: String,
      required: true
    },
    // 带有默认值的数字
    propD: {
      type: Number,
      default: 100
    },
    // 带有默认值的对象
    propE: {
      type: Object,
      // 对象或数组默认值必须从一个工厂函数获取
      default() {
        return { message: 'hello' }
      }
    },
    // 自定义验证函数
    propF: {
      validator(value) {
        // 这个值必须匹配下列字符串中的一个
        return ['success', 'warning', 'danger'].includes(value)
      }
    },
    // 具有默认值的函数
    propG: {
      type: Function,
      // 与对象或数组默认值不同,这不是一个工厂函数 —— 这是一个用作默认值的函数
      default() {
        return 'Default function'
      }
    }
  }
})

prop がオブジェクト書き込みメソッドを使用していることが誰でもわかると思います。受信した属性が正しいかどうかを確認し、適切なタイミングでプロンプトを表示できます。これは次のとおりです。これは、独立したコンポーネントを作成する場合に特に便利です。

vue は一方向のデータ フロー原則に従う必要があるため、prop 値を変更する必要はなく、他のソリューションを使用する必要があります。

prop 値を変更するための一般的なソリューション

1. Prop は初期値を渡し、それをデータに割り当てます

props: ['initialCounter'],
data() {
  return {
    counter: this.initialCounter
  }
}

2. 属性を計算して prop 値を取得します

props: ['size'],
computed: {
  normalizedSize() {
    return this.size.trim().toLowerCase()
  }
}

スロット スロット

スロット スロットは、

<todo-button>
  Add todo
</todo-button>
<!-- todo-button 组件模板 -->
<button class="btn-primary">
  <slot></slot>
</button>

などのコンポーネントのコンテンツを配布するために使用されます。レンダリングすると、次のような [Add todo] に置き換えられます。

<!-- 渲染 HTML -->
<button class="btn-primary">
  Add todo
</button>

これはスロットの最も基本的な使い方です。名前付きスロットから派生したものです。その名の通り、スロットを区別するためのものです。複数のスロットを設定することができます。例:

<div class="container">
  <header>
    <slot name="header"></slot>
  </header>
  <main>
    <slot></slot>
  </main>
  <footer>
    <slot name="footer"></slot>
  </footer>
</div>

スロットのバックアップ情報の設定に遭遇することがあります。その場合は、次のように使用できます:

<button type="submit">
  <slot>Submit</slot>
</button>

スロットのバックアップ情報は、Submit

イベント イベント

イベント名です。

子コンポーネントがデータを変更したとき、親コンポーネントに通知したいときは、次のようにイベントイベントを使用します。子コンポーネントが呼び出すときのイベント名はキャメルケース名ですが、親コンポーネントのイベント名はケバブケース名です。

カスタム イベント

// 子组件
this.$emit(&#39;myEvent&#39;)

などの Emits オプションを使用してイベントをカスタマイズできます。カスタム イベントが同じである場合に注意してください。クリックなどのネイティブ イベントとして使用した場合、カスタム イベントがネイティブ イベントを置き換えます

#コンポーネントの構成

##公式 Web サイトから画像を紹介します

# ページは、コンポーネントで構成されるツリーと同等です。各コンポーネントには、親コンポーネントとサブコンポーネントがある場合があります。

属性 prop を使用すると、親コンポーネントがプロパティをサブコンポーネントに渡すことができ、イベント イベントを使用すると、サブコンポーネントが親コンポーネントに情報を渡すことができます。スロット スロットは、コンテンツ

を配布するために親コンポーネントによって使用されます。 vue コンポーネントの 3 つの API (prop、slot、event) についての深い理解

概要

これら 3 つの API に加えて、コンポーネントにはライフサイクル、ミックスイン、計算されたプロパティなどの他のコンテンツもあります。開発にはこの 3 つの API で十分です。これら 3 つの API をマスターしたら、あとはコンポーネントの対話ロジックを分離し、さまざまな機能をさまざまなサブコンポーネントに分散してみて、コンポーネント ツリーを構築するだけです。

プログラミング関連の知識について詳しくは、プログラミング入門

をご覧ください。 !

以上がvue コンポーネントの 3 つの API (prop、slot、event) についての深い理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。