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

推薦する

JavaScript で一意の ID を生成するいくつかの方法

考えられる解決策1. Math.randomは[0,1)の範囲の乱数を生成します。 //今回は生成さ...

Vue が Bibibili のホームページを模倣する際の問題

エンジニアリング構造プロジェクトは2つの部分に分かれています。bilibili-apiはAPIインタ...

ウェブサイトにファビコンを追加するためのヒント: URLの前の小さなアイコン

いわゆるファビコンは、Favorites Icon の略で、中国語ではウェブサイトアバターと呼ばれて...

Serv-U FTPとADの完璧な統合ソリューションの詳細な説明

会社が現在使用しているソリューションを確認するためにバックエンドにログインしました。使用される FT...

Zookeeper&Kafka クラスターを構築するための Docker の実装

最近Kafka勉強しています。クラスタの状態をテストする準備をしていたときに、仮想マシンを 3 つ開...

Linuxテキスト処理ツールの詳細な説明

1. /etc/passwdファイル内のデフォルトシェルが/sbin/nologinではないユーザー...

Linux システムで HugePages をすばやく構成するための完全な手順

序文Linux システムの HugePages と Oracle データベースの最適化については、関...

Linuxでブーストライブラリをインストールするための完全な手順

序文Boost ライブラリは、標準ライブラリのバックアップとして機能し、C++ 標準化プロセスの開発...

React useMemo と useCallback の使用シナリオ

目次メモを使うコールバックの使用メモを使う親コンポーネントが再レンダリングされると、そのすべての要素...

JavaScriptでポインターの位置を取得する方法を教えます

JavaScript でポインターの位置を取得する方法は、イベント オブジェクトの pageX と ...

ウェブページでメモの詳細が灰色になる問題に対処する

1. IE では、相対的な配置、つまり <div style="background...

MySQLクライアントとサーバーのプロトコルの解釈

目次MySQL クライアント/サーバー プロトコルMySQL サーバーから高いパフォーマンスを得る必...

MySql のサブクエリ内のクエリ例の詳細な説明

北西を見ると私の故郷はどこにあるでしょうか。南東の満月を何度見たことがあるでしょうか。月が再びゆっく...

5分でDockerをインストールする詳細な手順

CentOS に Docker をインストールするには、オペレーティング システムが CentOS ...

MySQL シリーズ 11 ログ

チュートリアルシリーズMySQL シリーズ: MySQL リレーショナル データベースの基本概念My...