レンダリングAPIの変更この変更は<template>ユーザーに影響しません
レンダリング関数のパラメータ// 2.0 レンダリング関数 export default { レンダリング(h) { h('div') を返す } } // 3.x 構文 export default { 与える() { h('div') を返す } } レンダリング関数のシグネチャの変更// 2.x エクスポートデフォルト{ レンダリング(h) { h('div') を返す } } // 3.x 'vue' から { h, reactive } をインポートします エクスポートデフォルト{ セットアップ(prop, {スロット, 属性, 出力}) { 定数状態 = リアクティブ({ カウント: 0 }) 関数の増分() { 状態.count++ } // レンダリング関数に戻る return () => h( 'div', { onClick: 増加 }, 状態数 ) } } VNode プロパティのフォーマット// 2.x { クラス: ['button', 'is-outlined'], スタイル: {色: '#fffff'}, 属性: {id: '送信'}, domProps: {innerHTML: ''}, オン: {クリック: 送信フォーム}, キー: '送信ボタン' } // 3.x VNode構造はフラットです{ クラス: ['button', 'is-outlined'], スタイル: { 色: '#34495E' }, id: '送信', 内部HTML: ''、 onClick: 送信フォーム、 キー: '送信ボタン' } スロット統合通常のスロットとスコープ付きスロットを変更しました
// 2.x h(レイアウトコンポーネント、[ h('div', {スロット: 'header'}, this.header), h('div', {スロット: 'header'}, this.header) ]) // スコープスロット: // 3.x h(レイアウトコンポーネント、{}、{ ヘッダー: () => h('div', this.header), コンテンツ: () => h('div', this.content) }) // プログラム的にスコープ付きスロットを導入する必要がある場合、それらは $slots オプションに統合されるようになりました // 2.x スコープ付きスロット this.$scopedSlots.header // 3.x ではこれを書きます。$slots.header $listeners を削除する
Vue2 では、this.attrs と this.attrs および this.listeners を使用して、それぞれコンポーネントに渡される属性とイベント リスナーにアクセスできます。inheritAttrs: false と組み合わせることで、開発者はこれらの属性とリスナーをルート要素ではなく他の要素に適用できます。 <テンプレート> <ラベル> <input type="text" v-bind="$attrs" v-on="$listeners"> </ラベル> </テンプレート> <スクリプト> エクスポートデフォルト{ 継承属性: false } </スクリプト> Vue の仮想 DOM では、イベント リスナーは on というプレフィックスが付いた属性になり、attrs オブジェクトの一部になったため、リスナーは削除されます。 <テンプレート> <ラベル> <input type="text" v-bind="$attrs" /> </ラベル> </テンプレート> <スクリプト> エクスポートデフォルト{ 継承属性: false } // このコンポーネントが id 属性と v-on:close リスナーを受け取った場合、$attrs オブジェクトは次のようになります { id: 'my-input', onClose: () => console.log('close イベントがトリガーされました') } </スクリプト> $attrs にクラスとスタイルが含まれるようになりましたこれで$attrにはクラスやスタイルを含むすべての属性が含まれるようになりました 2.xでは、仮想DOMはクラスとスタイルを特別に処理するため、それらは$attrに含まれず、inheritAttr: falseを使用すると副作用が発生します。
<テンプレート> <ラベル> <input type="text" v-bind="$attrs" /> </ラベル> </テンプレート> <スクリプト> エクスポートデフォルト{ 継承属性: false } </スクリプト> <!-- 書き込み --> <my-component id="my-id" class="my-class"></my-component> <!-- vue2 は以下を生成します --> <label class="私のクラス"> <input type="text" id="私のID" /> </ラベル> <!-- vue3 は以下を生成します --> <ラベル> <input type="text" id="私のID" class="私のクラス" /> </ラベル> 以上がvue3におけるレンダリング機能の非互換な変更についての詳しい説明です。vueレンダリング機能の非互換な変更についての詳細は、123WORDPRESS.COM内の他の関連記事にも注目してください! 以下もご興味があるかもしれません:
|
<<: MySQL 5.7.18 の解凍バージョンをダウンロードしてインストールし、MySQL サービスを開始するための詳細なグラフィック手順
>>: Linux でコマンドまたはプロセスの実行時間を調べる方法
Array の filter、find、some、reduce メソッドの違いを区別し、使用シナリオ...
この記事の例では、Vueモバイル端末で指のスライド効果を実現するための具体的なコードを紹介します。具...
開発プロセス中によく発生する問題は、div のサイズ変更をどのように監視するかということです。たとえ...
【歴史的背景】私は 3 年間 MySQL-DBA として働いてきましたが、MySQL が「基本的に利...
ウィンドウの中央にブロック要素の位置を設定する方法ブロック要素をウィンドウの中央に配置する上記の方法...
序文この記事では、DDCTF の 5 番目の質問、つまり不明なフィールド名をバイパスする手法を紹介し...
セキュリティ上の理由から、Alibaba Cloud Server ECS にはデフォルトで独自のセ...
目次ビジネスシナリオ:効果のデモンストレーション:ビジネスシナリオ: el-form を使用する場合...
iPadなどのモバイル端末の普及により、人々がモバイル端末で読書に費やす時間はますます長くなり、読...
1.移行遷移プロパティの使用法: transition :transition-property t...
VMware Workstationsが仮想マシンエラーを起動する エラー レポートのリンク htt...
以前の開発では、クラス、名前などの HTML のデフォルト属性を使用していました。 Huawei社の...
自宅のルーターが300Mの帯域幅を80Mに強制的に減らしたため、3205Uソフトルーターを購入しまし...
目次tomcatをデプロイする1.ダウンロードして解凍する2. 設定ファイルを変更する移植プロジェク...
Alibaba Cloud のカスタム Ubuntu イメージのインポートには、OSS スナップショ...