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のデータ保存場所を移動する方法

ブログ    

推薦する

Vue で Excel ストリーム ファイルをダウンロードし、ダウンロード ファイル名を設定する方法

目次概要1. URL経由でダウンロード2. aタグのダウンロード属性とblobコンストラクタを組み合...

CSS を使用して波状のウォーターボール効果を実装するためのサンプルコード

今日は新しいCSS特殊効果、波型ウォーターボール効果を学びました。これもとても美しいです HTML:...

div 内の img と span の垂直方向の中央揃えの問題について

以下のように表示されます。 XML/HTML コードコンテンツをクリップボードにコピー<htm...

SQLインジェクションの詳しい解説 - セキュリティ編(第2部)

この記事に誤りがあったり、ご提案がありましたら、お気軽にご連絡ください。よろしくお願いいたします。は...

MySQL で explain ステートメントを使用する基本的なチュートリアル

目次1. 概要1. 説明文テスト2. 結果の各列の説明2. ID列の説明1. 環境整備2. expl...

Mysql 日付クエリの詳細な紹介

現在の日付を照会する CURRENT_DATE() を選択します。 CURDATE() を選択する;...

MySQL thread_stack 接続スレッドの最適化

MySQL は、ネットワーク経由だけでなく、名前付きパイプ経由でも接続できます。MySQL への接続...

ミニプログラム開発ツールのソースコードからの基本実装の分析

目次ミニプログラム開発者ツールのソースコードを表示する方法ミニプログラムアーキテクチャ設計1. ミニ...

ルート権限なしでログインするためのDockerソリューション

docker コマンドを初めて使用する場合、権限の問題を確認するメッセージが表示されます。 unix...

タブステータスバーの切り替え効果を実現するための js と jQuery

今日は、タブ バーをクリックして切り替えるという目的を実現するために、js と jQuery を使用...

MySQL 8.0.15 winx64 解凍版のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.15 winx64解凍版のインストールと設定方法を紹介します。具体...

VUE+CanvasはシンプルなGobangゲームの全プロセスを実現します

序文レイアウトの点では、Gobang はランダムな動きを目的とするゲームよりも実装がはるかに簡単で、...

MySQLのトランザクションとデータ一貫性処理の問題を分析する

この記事では、セキュリティ、使用方法、同時処理などを通じて、MySQL トランザクションとデータの一...

VueプロジェクトにPWAを導入する手順

目次1. 依存関係をインストールする2. vue.config.js ファイルで pwa を設定しま...