vue3 統合 API における vue2 の $refs の代替方法についての簡単な説明

vue3 統合 API における vue2 の $refs の代替方法についての簡単な説明

vue2 プロジェクト開発の経験があれば、$refs に精通しているでしょう。 vue3 の急激なアップグレードにより、vue3 で $refs を使用するにはどうすればよいでしょうか?以前にも同様の問題に遭遇したことがあると思います。私も同じ疑問を抱いています。検索エンジンと GitHub を通じて、基本的に $refs の使い方を習得できます。 vue3 では、結合された API の関数 ref を使用して、静的または動的 HTML 要素のアプリケーションを置き換えます。

最近、空き時間を利用してvue3プロジェクト「Crayon Management Template: Vue3 + Vuex4 + Ant Design2」の開発を学んでいます。この2日間でイテレーションが少し進み、チャートコンポーネントが実装されました。記事を書いているときに、提出したコードのコミットにタイプミスがあることに気付きました。

vue3 で統合 API の setup() メソッドを使用する場合、this.$refs は通常使用できませんが、新しい関数 ref() は使用できます。

以下のコードは https://github.com/QuintionTang/crayon/blob/feat-dashboard/src/qtui/components/Chart.vue から取得したものです。

<テンプレート>
    <canvas ref="refChart" :height="setHeight"></canvas>
</テンプレート>
<スクリプト>
「vue」から、defineComponent、onMounted、ref、inject、watch } をインポートします。
「chart.js」からチャートをインポートします。
"@/helper/index" から deepCopy をインポートします。
エクスポートデフォルトdefineComponent({
    名前: "QtChart",
    小道具: {
        タイプ: {
            タイプ: 文字列、
            必須: true、
            デフォルト: "line",
        },
        データ: {
            タイプ: オブジェクト、
            必須: true、
            デフォルト: () => ({}),
        },
        オプション:
            タイプ: オブジェクト、
            デフォルト: () => ({}),
        },
        身長:
            タイプ: 数値、
            デフォルト: 0,
        },
        参照キー: {
            タイプ: 文字列、
            デフォルト: null、
        },
    },
    セットアップ(プロパティ) {
        定数refChart = ref();
        // 初期化メソッド const init = () => {
            const canvasChart = refChart.value?.getContext("2d");
            const chartHelper = 新しい Chart(canvasChart, {
                タイプ: props.type、
                データ: deepCopy(props.data)、
                オプション: props.options、
            });
            ウォッチ(props, () => {
                chartHelper.data = deepCopy(props.data);
                chartHelper.options = props.options;
                チャートヘルパーを更新します。
            });
            // インスタンスをrefChartにアタッチする
            refChart.value.instance = chartHelper;
        };
        // 高さを設定する const setHeight = () => {
            戻る {
                高さ: props.height、
            };
        };
        // インスタンスをバインドして inject を使用します const bindInstance = () => {
            (props.refKey)の場合{
                定数bind = inject(`bind[${props.refKey}]`);
                if (バインド) {
                    バインド(refChart.value);
                }
            }
        };
        マウント時(() => {
            バインドインスタンス();
            初期化();
        });
        戻る {
            参照チャート、
            高さを設定する、
        };
    },
});
</スクリプト>

このコードはチャート コンポーネント Chart を完全に実装します。このコンポーネントでは、プロパティ props がカスタマイズされ、そのプロパティ値はセットアップ メソッドにパラメーターを渡すことによって使用されます。チャートの dom オブジェクトとして html で ref="refChart" を定義します。setup メソッドでは、ref メソッドを使用してレスポンシブ変数オブジェクトを定義し、setup 関数の最後に戻り値として使用します。

定数refChart = ref();

戻り値の属性名は HTML 内の ref 値と一致している必要があることに注意してください。

以下のコードは正常に実行できます。

<テンプレート>
    <canvas ref="refChart" :height="setHeight"></canvas>
</テンプレート>
<スクリプト>
「vue」から、defineComponent、onMounted、ref、inject、watch } をインポートします。
「chart.js」からチャートをインポートします。
"@/helper/index" から deepCopy をインポートします。
エクスポートデフォルトdefineComponent({
    名前: "QtChart",
    小道具: {
        // ... 
    },
    セットアップ(プロパティ) {
        const refChartBox = ref();
        // ...
        戻る {
            refChart:refChartBox、
        };
    },
});
</スクリプト>

以下の状況ではプログラムエラーが発生し、期待した結果が得られません。これは、HTML で定義された ref="refChart" が、セットアップによって返される refChartBox と一致していないためです。

<テンプレート>
    <canvas ref="refChart" :height="setHeight"></canvas>
</テンプレート>
<スクリプト>
「vue」から、defineComponent、onMounted、ref、inject、watch } をインポートします。
「chart.js」からチャートをインポートします。
"@/helper/index" から deepCopy をインポートします。
エクスポートデフォルトdefineComponent({
    名前: "QtChart",
    小道具: {
        // ... 
    },
    セットアップ(プロパティ) {
        const refChartBox = ref();
        // ...
        戻る {
            refChartBox、
        };
    },
});
</スクリプト>

結論は

今回はたまたまプロジェクトで使っているrefメソッドの使い方を簡単に紹介しただけです。今後はプロジェクトを進めながらメモを取りながら学んでいきたいと思います。

これで、vue3 組み合わせ API における vue2 の $refs の代替方法についての記事は終了です。より関連性の高い vue3 組み合わせ API コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue3+スクリプト設定+ts+Vite+Volarプロジェクト
  • Vue3 ベースのスクリプト設定構文 $refs の使用

<<:  Nginx サーバーで Web クローラーをブロックおよび禁止する方法

>>:  Centos7でmysql5.7.19のデータ保存場所を移動する方法

推薦する

Linux rpm および yum コマンドとその使用法の詳細な説明

RPM パッケージ管理インターネット ダウンロード パッケージのパッケージ化およびインストール ツー...

LINUX ポートが占有されているかどうかを確認します

ポートが占有されているかどうかは、これまで一度もわかりませんでした。多くの人に尋ねて、ようやくわかり...

JavaScriptはシンプルな日付効果を実装します

JavaScriptの日付エフェクトの具体的なコードは参考用です。具体的な内容は次のとおりです。コー...

docker を使用して複数のネットワーク インターフェースを持つコンテナーを起動する方法の例

コンテナにネットワークインターフェースを追加する1 デフォルトのネットワークモードでコンテナを実行す...

MySQLでの少し複雑な使用例コード

序文MySQL の構文は誰にとっても難しいものではないと思いますが、この記事では主に MySQL の...

複数レベルの複雑な動的ヘッダーの avue-crud 実装例

目次序文バックグラウンドデータの結合フロントエンドデータ表示ページ効果表示Avue.js は、既存の...

MIME エンコーディングの概要 (オンライン情報と実際の経験から統合)

1. MIME: 多目的インターネットメール拡張インペリアル カレッジ オブ コンピュータ オンラ...

HTML 5 プレビュー

<br />オリジナル: http://www.alistapart.com/artic...

JavaScript でネットワーク速度をテストする方法

目次序文ネットワーク速度のフロントエンド判定原理のまとめ1. img を読み込むか Ajax リクエ...

Spring Boot 2.4 の新機能、ワンクリックビルド、Docker イメージプロセスの詳細説明

背景開発プロセス中に Docker コンテナ化をサポートするために、通常は Maven を使用してコ...

XHTML と CSS によるオブジェクト指向プログラミング

<br />XHTML と CSS がオブジェクト指向だったらよかったのに。 。太陽は北...

MySQLクエリ結果をCSVにエクスポートする方法

MySQL クエリ結果をcsvにエクスポートするには、通常、php を使用して mysql に接続し...

Ubuntu の起動後にアプリケーションを実行するためのターミナルの設定方法

1.メニューバーにスタートと入力し、スタートアップアプリケーションをクリックして入力します。 2. ...

ウェブページ制作と饅頭の関係(体験の共有)

昨日は遅くまで寝ていて、一日中起きていました。私の年齢では、夜更かしして本を書くのはもう無理のようで...

MySQLカスタム関数の原理と使用法の分析

この記事では、例を使用して MySQL カスタム関数の原理と使用方法を説明します。ご参考までに、詳細...