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

推薦する

入力ボックスのプレースホルダーテキストのデフォルトの色を変更する -webkit-input-placeholder メソッド

HTML5 では、入力用のネイティブ プレースホルダー属性が追加されており、これは高度なブラウザでサ...

CentOS 7 で MySQL 接続数が 214 に制限される問題の解決方法

問題を見つける最近、プロジェクトで問題が発生しました。接続が多すぎるため、「接続が多すぎます」という...

知らないかもしれない実用的なTypeScriptのヒント

目次序文関数のオーバーロードマッピングタイプ部分的、読み取り専用、Null 可能、必須選択、記録除外...

JavaScript での HTML キャンバスとページ ストレージ テクノロジの使用に関する詳細な説明

目次1. JavaScriptはHTMLでキャンバスを使用する2. ページストレージ技術1. Jav...

IntelliJ IDEA で Java を使用して MySQL データベースに接続する方法の詳細な説明

1. MySQLデータベースをダウンロードし、インストールして設定するダウンロードアドレス: htt...

Linux tac コマンドの実装例

1. コマンドの紹介tac (cat の逆順) コマンドは、ファイルの内容を行単位で逆順に出力します...

WeChatアプレットキャンバスが署名機能を実装

WeChatアプレットプロジェクトでは、開発モジュールに手書き署名機能が含まれ、WeChatアプレッ...

CSS で中空効果を実装するサンプルコード

効果原理主にCSSグラデーションを使用して、切り取りを必要としない背景のくり抜きを実現します。クーポ...

MySqlのインストールとログインの詳細な説明

LinuxにMySQLがすでにインストールされているかどうかを確認する sudo service m...

js シンプルで粗雑なパブリッシュとサブスクライブのサンプルコード

パブリッシュ/サブスクライブとは何ですか?例を挙げてみましょう。あなたは服を買うために店に行きます。...

Linux コマンドライン操作 Baidu クラウドのファイルのアップロードとダウンロード

目次0. 背景1. インストール2. Baidu Cloudアカウントにログインする3. ファイルを...

MySQL EXPLAIN出力列の詳細な説明

1. はじめにEXPLAIN ステートメントは、MySQL がステートメントを実行する方法に関する情...

LinuxでDHCPサーバーを構築する方法

目次1. 基礎知識: 2. DHCPサーバーの設定: 1. サーバーのIPを確認する2. DHCP ...

XHTML Web ページ チュートリアル

<br />この記事は主に、初心者にXHTMLの基本知識と、XHTMLとHTMLの違いを...

上下に空白行があるフォームを挿入する解決策

ウェブページを作成するときに、フォームを挿入した後、フォームの上下に空白行が表示されることがよくあり...