vue3 のさまざまな構文形式を比較したサンプルコード

vue3 のさまざまな構文形式を比較したサンプルコード

デフォルトのテンプレートメソッドはvue2に似ており、コンポーネント内のセットアップ関数を使用します。

// 親コンポーネント <テンプレート>
  <div>
    <div>
      <div>{{都市名}}</div>
      <button @click="changeReactive">リアクティブを変更する</button>
      <button @click="handleFather">親コンポーネントをクリックします</button>
    </div>
    <Child ref="childRef" @handleBtn="handleBtn" @testClick="testClick" city="成都" />
  </div>
</テンプレート>

<スクリプト>
'vue' から { ref、onMounted、toRefs、reactive } をインポートします。
'./Child.vue' から Child をインポートします。

エクスポートデフォルト{
  コンポーネント:
    子供
  },
  設定 () {
    定数ハンドルボタン = (val) => {
      console.log('btn', val)
    }

    const testClick = (val) => {
      コンソールログ('testClick', val)
    }

    定数childRef = ref(null)

    定数ハンドルファーザー = () => {
      childRef.value.observed.a = 666 //親コンポーネントが子コンポーネントの値を変更します console.log('子コンポーネントを取得する方法', childRef.value)
      // サブコンポーネントは expose を定義する必要があります。定義しない場合は、返す必要があります。対応する関数は通常、直接返されません。ページで使用されていない場合は、必要なメソッドまたは値のみを公開します。 }

    // セットアップ関数メソッドを介して記述し、ページで使用されるメソッドと値を返す必要があります // reactve によって定義された値の場合、分解によってページにレンダリングされた値はレスポンシブではないため、toRefs を介して変換してから分解する必要があります // ...toRefs(testReactive)
    
    const testReactive = リアクティブ({
      都市: '北京'、
      年齢: 22
    })

    定数changeReactive = () => {
      testReactive.city = '重慶'
    }

    戻る {
      ハンドルボタン、
      テストクリック、
      ハンドル父、
      ...toRefs(テストリアクティブ)、
      変化反応、
      子参照
    }
  }
}
</スクリプト>


//サブコンポーネント <テンプレート>
  <div>
    {{観察された.a}}
    <button @click="handleBtn">クリック</button>
  </div>
</テンプレート>

<スクリプト>
'vue' から {defineProps、defineEmits、defineEmit、defineExpose、reactive } をインポートします。

エクスポートデフォルト{
  小道具: {
    都市: 文字列
  },

  /* これは主に ctx.attrs がこの属性にアクセスできないようにするために設定されます */
  /* props に設定された一部のプロパティは attrs には表示されません*/

  出力: ['testClick'], // これを設定する目的は、attrs に対応するカスタム メソッドがないことを確認することです。
  // peops がサブコンポーネントに設定されている場合、対応する値は attrs ではアクセスできません // arrts は vue3 で機能が強化されており、カスタム メソッド、クラス、スタイルがマウントされています
  //vue2 では、カスタム メソッドは $listeners にマウントされます。vue3 では、$listeners は削除されています。setup (props, ctx) {
    const { 公開、放出 } = ctx
    定数ハンドルボタン = () => {
      コンソールログ('btn', ctx)
      出力('testClick', 666)
    }

    const 観察 = 反応的({
      1: 1
    })

    関数 clickChild (値) {
      観測値.a = 値
    }

    さらす({
      clickChild, //カスタムメソッドを公開、親コンポーネントの呼び出しを監視//子コンポーネントの値を公開})

    戻る {
      観察された、
      ハンドルボタン
    }
  }
}
</スクリプト>

スクリプトタグ<script setup>にセットアップを記述します。

// 親コンポーネント <テンプレート>
  <div>
    <button @click="handleFather">父親をクリック</button>
    <Child ref="childRef" @handleBtn="handleBtn" @testClick="testClick" city="成都" />
  </div>
</テンプレート>

<スクリプトの設定>
'vue' から { ref } をインポートします
'./Child.vue' から Child をインポートします。
// 戻りエクスポートページで使用されていないメソッドと値のこの書き方では、Vue 上の対応する定義を直接分解する必要があります。
定数childRef = ref(null)

定数ハンドルボタン = (val) => {
  console.log('btn', val)
}

const testClick = (val) => {
  コンソールログ('testClick', val)
}

定数ハンドルファーザー = () => {
  console.log('子コンポーネントを取得するメソッド', childRef.value)
  childRef.value.testFatherClick() //親コンポーネントは子コンポーネントのメソッドを呼び出します //子コンポーネントはdefineExposeを通じて対応するメソッドを公開します}

</スクリプト>


// サブコンポーネント <テンプレート>
  <div>
    <button @click="handleBtn">クリック</button>
  </div>
</テンプレート>

<スクリプトの設定>
'vue' から {defineProps、defineEmits、defineExpose、reactive } をインポートします。

const props = defineProps({
  都市: 文字列
})

const エミット = defineEmits(['handleBtn', 'testClick'])

定数ハンドルボタン = () => {
  // console.log('btn', props, 出力)
  出力('testClick', 12)
}

const testFatherClick = () => {
  console.log('テスト親コンポーネントが子コンポーネントをクリック')
}

const 観察 = 反応的({
  1: 1
})

defineExpose({ //メソッドを親グループに公開する testFatherClick,
  観察された
})

</スクリプト>

<スタイルスコープ>
</スタイル>

jsx によるレンダリングは react に非常に近く、私が最もお勧めする方法でもあります。jsx は ts もサポートしていますが、.vue ファイルは tsx ほどサポートされていません。

// 親コンポーネント import { ref, reactive } from 'vue'
'./Child.jsx' から Child をインポートします。

const 父 = {
  設定() {
    // jsx で定義された ref は、ページで使用するときに .value を介してアクセスする必要があります。const city = ref('北京')

    定数changeCity = () => {
      city.value = '杭州'
    }

    定数childRef = ref(null)

    const handelFather = (追加) => {
      // また、コンポーネントで expose メソッドを公開することで // city.value = 'Hangzhou'
      console.log('childRef', childRef.値)
    }

    const testChildClick = (val) => {
      console.log('テストサブコンポーネントのクリック', val)
    }

    戻り値 () => {
      戻る (
        <div>
          <div>{city.value}</div>
          <button onClick={changeCity}>都市を変更</button>
          <button onClick={handelFather}>親をクリック</button>
          <子 testChildClick={testChildClick} ref={childRef} />
        </div>
      )
    }
  }
}

エクスポートデフォルト 父


//サブコンポーネント import { ref, reactive } from 'vue'

定数子 = {
  小道具: {
    testChildClick: 関数
  },

  セットアップ(props, { 発行, 公開 }) {
    const { testChildClick } = プロパティ
    const testFatherClick = () => {
      console.log('テスト親コンポーネントが子コンポーネントをクリック')
    }

    定数handelBtn = () => {
      // emitting('testChildClick') // これは jsx では動作しません // console.log('props', props)
      testChildClick('親コンポーネントに値を返す')
      // このメソッドは、関数を介して親コンポーネントに値を渡して子コンポーネントに関数を渡す唯一の方法です。}

    さらす({
      テスト父クリック
    })

    戻り値 () => {
      戻る (
        <div>
          <button onClick={handelBtn}>子コンポーネントは値を親コンポーネントに渡します</button>
        </div>
      )
    }
  }
}

デフォルトの子をエクスポート

要約する

これで、vue3 のさまざまな構文形式の比較に関するこの記事は終了です。より関連性の高い vue3 構文形式の比較コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

<<:  Linux でジャンクファイルをエレガントに削除する方法

>>:  MySQLはライブラリ内の主キーなしでテーブルインスタンスコードを素早く取得します

ブログ    

推薦する

3列レイアウトを実現するCSS3フレキシブルボックスフレックス

タイトルの通り、高さは既知で、左と右の列の幅は 300 ピクセル、中央は適応型です。弾性ボックス自体...

ユーザーエクスペリエンスの要素またはWebデザインの要素

システムとユーザー環境の設計<br />Apple システムの成功は、そのシステム アー...

Dockerはelasticsearchイメージを起動し、ディレクトリをマウントした後にエラーを解決します

docker hub から es イメージ (バージョン 6.4.2) をダウンロードしました。詳細...

Linux でファイルの作成時間を取得する方法と実践的なチュートリアル

背景ファイルの作成時刻を取得する必要がある場合があります。例えば: 「xtrabackup スキーマ...

MySQLは、統計クエリを最適化するために、sum、case、whenを巧みに使用します。

私は最近、会社で統計レポートの開発に関わるプロジェクトに取り組んでいました。データの量が比較的多かっ...

不規則な絵の滝の流れ原理の分析と応用

プロジェクトで発生した不規則な絵画壁のレイアウト問題は、次のように分析されます。 1.img dis...

CentOS 6.8 に MySQL 8.0.18 をインストールするチュートリアルの簡単な分析 (RPM 方式)

今日は、CentOS 6.8 サーバーに MySQL 8.0.18 をインストールする方法を記録しま...

JavaScript でオブジェクトをトラバースする 5 つの方法 サンプルコード

目次準備する5つの武器…のためにオブジェクト.キーオブジェクト.getOwnPropertyName...

Centos8 (最小インストール) Python3.8+pip のインストール方法に関するチュートリアル

Python8のインストールを最小化した後、Python3.8.1をインストールしました。オンライン...

VMware15 仮想マシン ブリッジ モードでインターネットにアクセスできない問題の解決方法

説明 ソリューションVMware 15 仮想マシン ブリッジ モードではインターネットにアクセスでき...

CSS -webkit-box-orient: コンパイル後に垂直プロパティが失われる

1. 原因要件は 2 行を表示することであり、余分なテキストは 3 つのドットに置き換えられるため、...

MySQLの遅いクエリ問題の詳細な分析データ送信

例を通して、MySQL のデータ テーブル送信のクエリが遅い問題の解決策を共有しました。最近、コード...

Linux で ARM 開発ボード用のファイルシステムを作成する

1. Busyboxのソースコードをオンラインでダウンロードしてください。コンパイル方法については、...

CSS3を使用してボタンホバーフラッシュダイナミック特殊効果コードを実装する

CSS3 の列シリーズ属性を使用してウォーターフォールレイアウトを作成する方法を紹介しました。興味の...

ウェブページ制作TDは隠し表示もオーバーフロー可能

おそらく、この記事にこのようなタイトルを付けると、誰かがこう尋ねるでしょう。「なぜまだテーブルに注目...