目次
レスポンシブ構文シュガーは
あなた Yuxi は 2 週間前 (2023 年 2 月 21 日午前 10:05 GMT 8、グリニッジ標準時 8 時) に個人的に放棄の理由を述べました。翻訳は次のとおりです。
ホームページ ウェブフロントエンド Vue.js Vue のリアクティブ構文シュガーは非推奨になったことに注意してください。

Vue のリアクティブ構文シュガーは非推奨になったことに注意してください。

Mar 06, 2023 pm 03:51 PM
フロントエンド vue.js vite

この記事では、Vue の最新状況をお届けします。主に Vue のレスポンシブ構文シュガーについて説明します。興味のある友達は一緒に見てください。皆さんのお役に立てれば幸いです。

Vue のリアクティブ構文シュガーは非推奨になったことに注意してください。

はじめに

複合 API の概念が導入されて以来、大きな未解決の問題が ref# でした。 ## と reactive の間で 1 つを使用する必要がありますか? reactive には分解により応答性が失われるという問題があり、一方 ref はあらゆる場所で使用する必要がある .value は面倒に感じられ、型システム。.value をドロップします。

たとえば、次のカウンタ:

<template>
  <button @click="increment">{{ count }}</button>
</template>
ログイン後にコピー

ref を使用して、count 変数と increment メソッドを定義します。 ##<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">let count = ref(0) function increment() {   count.value++ }</pre><div class="contentsignin">ログイン後にコピー</div></div> レスポンシブ構文シュガーを使用すると、次のようなコードを書くことができます:

let count = $ref(0)

function increment() {
  count++
}
ログイン後にコピー

Vue のレスポンシブ構文シュガーはコンパイル時の変換ステップ
    $ref()
  1. このメソッドは コンパイル時マクロ コマンド です。これは実行時に呼び出される実際のメソッドではありませんが、最終的な count を示す Vue コンパイラのマーカーとして使用されます。変数は リアクティブ変数 である必要があります。 リアクティブ変数は通常の変数と同様にアクセスして再割り当てできますが、これらの操作はコンパイル後に
  2. .value
  3. を持つ ref になります。したがって、上記の例のコードも、ref を使用して定義された構文にコンパイルされます。
  4. ref
  5. を返す各リアクティブ API には、接頭辞 $ が付いている対応するマクロ関数があります。次の API が含まれます:
ref ->$ref
  • computed ->$computed
  • shallowRef ->$shallowRef
  • customRef -> $customRef
  • toRef -> $toRef
    #$()
  1. マクロを使用して、既存のref リアクティブ変数に変換します。
    const a = ref(0)
    let count = $(a)
    count++
    console.log(a.value) // 1
    ログイン後にコピー
    $$()
  1. マクロを使用すると、リアクティブ変数への参照を、対応する ref への参照として保持できます。
    let count = $ref(0)
    console.log(isRef($$(count))) // true
    ログイン後にコピー
$$()

は、リアクティブ変数でもあるため、構造化されていない props でも動作します。コンパイラーは、toRef: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">const { count } = defineProps&lt;{ count: number }&gt;() passAsRef($$(count))</pre><div class="contentsignin">ログイン後にコピー</div></div>Configuration

レスポンシブ構文シュガーは

Combined API

の独自の機能であり、次のように変換する必要があります。ビルドステップ経由で使用されます。

必須、
    @vitejs/plugin-vue@>=2.0.0
  1. が必要で、SFC および js(x)/ts(x) ファイルに適用されます。
    // vite.config.js
    export default {
      plugins: [
        vue({
          reactivityTransform: true
        })
      ]
    }
    ログイン後にコピー
    reactivityTransform
  • はプラグインの最上位オプションになり、script.refSugar には存在しなくなりました。 SFCにだけ効果があるわけではないからです。
vue-cli

ビルドの場合は、vue-loader@>=17.0.0 が必要ですが、現時点では SFC のみ有効です。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">// vue.config.js module.exports = {   chainWebpack: (config) =&gt; {     config.module       .rule('vue')       .use('vue-loader')       .tap((options) =&gt; {         return {           ...options,           reactivityTransform: true         }       })   } }</pre><div class="contentsignin">ログイン後にコピー</div></div>

webpack

vue-loader がビルドされる場合、vue-loader@>=17.0.0 が必要です (現在は SFC のみ) 。 効果。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">// webpack.config.js module.exports = {   module: {     rules: [       {         test: /\.vue$/,         loader: 'vue-loader',         options: {           reactivityTransform: true         }       }     ]   } }</pre><div class="contentsignin">ログイン後にコピー</div></div>

オプションで、次のコードを
    tsconfig.json
  1. ファイルに追加します。追加しないと、エラーが報告されます。 TS2304: 名前 '$ref' が見つかりません。、影響はありませんが、使用には影響しますが、開発エクスペリエンスには影響します:
    "compilerOptions":{ "types": ["vue/ref-macros"] }
    ログイン後にコピー
オプションで、次のコードを
    eslintrc.cjs
  1. ファイルに追加します。それ以外の場合は、プロンプトが表示されます ESLint: '$ ref' is not defined.(no-undef)
    module.exports = { ...globals: {
        $ref: "readonly",
        $computed: "readonly",
        $shallowRef: "readonly",
        $customRef: "readonly",
        $toRef: "readonly",
      }
    };
    ログイン後にコピー
レスポンシブ構文シュガーが有効になっている場合、これらのマクロ関数はこれらは世界中で利用可能であり、手動でインポートする必要はありません。 vue ファイルに
    vue/macros
  1. を明示的に導入することもできるため、2 番目と 3 番目の手順で tsconfig.jsoneslintrc を構成する必要がなくなります。 。
    import { $ref } from 'vue/macros'
    
    let count = $ref(0)
    ログイン後にコピー
  2. 廃止された実験的機能

    レスポンシブ構文シュガーはかつて実験的な機能であり、廃止されました。
  • 廃止された理由

    をお読みください。

  • 将来のマイナー バージョン アップデートで Vue コアから削除される予定です。引き続き使用したい場合は、
  • Vue Macros

    プラグインを使用してください。

  • 放棄の理由

あなた Yuxi は 2 週間前 (2023 年 2 月 21 日午前 10:05 GMT 8、グリニッジ標準時 8 時) に個人的に放棄の理由を述べました。翻訳は次のとおりです。

すでにご存知のとおり、私たちはチームの合意により、この RFC を正式に放棄しました。 #########理由######

Reactivity Transform の本来の目的は、リアクティブ状態を処理する際のよりクリーンな構文を提供することで開発者のエクスペリエンスを向上させることでした。実際の使用状況からのフィードバックを収集するための実験製品としてリリースしています。これらの提案された利点にもかかわらず、私たちは次の問題を発見しました:

  • .value を失うと、何が追跡されているのか、どの行が反応性効果をトリガーしたのかを知ることが難しくなります。この問題は、小規模な SFC ではあまり明らかではありませんが、大規模なコード ベースでは、特に構文が SFC の外部でも使用されている場合、精神的なオーバーヘッドがより顕著になります。

  • (1) により、一部のユーザーは SFC 内でのみ Reactivity Transform を使用することを選択します。これにより、異なるメンタル モデル間で不一致とコンテキスト切り替えコストが生じます。つまり、SFC 内でのみ使用すると不整合が発生し、SFC の外で使用すると保守性が損なわれるというジレンマがあります。

  • 生の参照を使用することを想定した外部関数が依然として存在するため、リアクティブ変数と生の参照の間の変換は避けられません。これにより、学習コンテンツと精神的負荷がさらに増え、初心者にとっては通常の Comboposition API よりも混乱することがわかりました。

最も重要なことは、断片化の潜在的なリスクです。これは明示的なオプトインですが、一部のユーザーは、この提案を使用することをオプトインしているユーザーもいれば、使用しないことを選択しているユーザーもいる、異なるコード ベースで作業する必要があるのではないかという懸念から、この提案に強い反対を表明しています。 Reactivity Transform には別のメンタル モデルが必要であり、JavaScript のセマンティクスが歪められるため、これは当然の懸念です (変数の割り当てによりリアクティブな効果が引き起こされる可能性があります)。

すべてのことを考慮すると、これを安定した機能として使用すると、利点よりも多くの問題が発生するため、良いトレードオフではないと考えています。

移行計画

メッセージ

  • Reactivity Transform は公式パッケージから削除されますが、これは良い試みだと思います。 ######よく書かれました。私は詳細な RFC とユーザーのフィードバックに基づく客観的な評価が好きです。最終的な結論は理にかなっています。完璧を善の敵にしないでください。
  • 私はこの機能の利便性を楽しんでいますが、実際に使用していると断片化の可能性がある問題を発見しました。将来のリリースでこの機能を削除することには抵抗があるかもしれませんが、エンジニアは真剣に受け止める必要があります。 ?
  • すべての関数を削除しますか、それとも変換を行う
  • ref.value
  • 部分だけを削除しますか?リアクティブな props デコンストラクションはどうでしょうか。これは今後も定着するのでしょうか? 中規模の電子商取引 Web サイトで問題なく使用しています。これを削除する理由は理解していますが、実際に使ってみると、これは非常に大きな改善であることがわかりました。そこで私の質問は、「今はどうなっているのか?」ということです。
  • .value
  • を嫌う人は、可能であれば ref() を避け、以前のように reactive() を使用することをお勧めしますか?
  • .value
  • は必要な複雑さです。他のリアクティブ ライブラリ xxx.set() と同様です。 すべての Reactivity Transform コードを変換するパッケージを作成するのは簡単ですよね?私も推奨された方法で物事を行うのが好きです。
  • ...
  • 推奨学習: 「
vue.js ビデオ チュートリアル


以上がVue のリアクティブ構文シュガーは非推奨になったことに注意してください。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Vue3+TS+Vite 開発スキル: SEO を最適化する方法 Vue3+TS+Vite 開発スキル: SEO を最適化する方法 Sep 10, 2023 pm 07:33 PM

Vue3+TS+Vite 開発スキル: SEO 最適化の実行方法 SEO (SearchEngineOptimization) とは、Web サイトの構造、コンテンツ、キーワードを最適化して検索エンジンで上位にランク付けし、それによって Web サイトのトラフィックと露出を増やすことを指します。 Vue3+TS+Viteなどの最新のフロントエンド技術の開発において、SEOをいかに最適化するかは非常に重要な問題です。この記事では、Vue3+TS+Vite の開発テクニックとそのための方法をいくつか紹介します。

Vue3+TS+Vite 開発スキル: クロスドメイン リクエストとネットワーク リクエストを最適化する方法 Vue3+TS+Vite 開発スキル: クロスドメイン リクエストとネットワーク リクエストを最適化する方法 Sep 09, 2023 pm 04:40 PM

Vue3+TS+Vite 開発スキル: クロスドメイン リクエストとネットワーク リクエストを最適化する方法 はじめに: フロントエンド開発では、ネットワーク リクエストは非常に一般的な操作です。ネットワーク リクエストを最適化してページの読み込み速度とユーザー エクスペリエンスを向上させる方法は、開発者が考慮する必要がある問題の 1 つです。同時に、異なるドメイン名にリクエストを送信する必要がある一部のシナリオでは、クロスドメインの問題を解決する必要があります。この記事では、Vue3+TS+Vite 開発環境でクロスドメイン リクエストを行う方法とネットワーク リクエストの最適化テクニックを紹介します。 1. クロスドメインリクエストソリューション

Vue3+TS+Vite 開発スキル: データを暗号化して保存する方法 Vue3+TS+Vite 開発スキル: データを暗号化して保存する方法 Sep 10, 2023 pm 04:51 PM

Vue3+TS+Vite 開発のヒント: データを暗号化して保存する方法 インターネット技術の急速な発展に伴い、データ セキュリティとプライバシー保護がますます重要になっています。 Vue3+TS+Vite 開発環境では、データをどのように暗号化して保存するかが、すべての開発者が直面する必要がある問題です。この記事では、開発者がアプリケーションのセキュリティとユーザー エクスペリエンスを向上させるのに役立つ、一般的なデータ暗号化とストレージのテクニックをいくつか紹介します。 1. データ暗号化 フロントエンド データ暗号化 フロントエンド暗号化は、データ セキュリティを保護するための重要な部分です。よく使われる

Vue3+TS+Vite 開発スキル: フロントエンドのセキュリティ保護を実行する方法 Vue3+TS+Vite 開発スキル: フロントエンドのセキュリティ保護を実行する方法 Sep 09, 2023 pm 04:19 PM

Vue3+TS+Vite 開発スキル: フロントエンドのセキュリティ保護を実行する方法 フロントエンド テクノロジの継続的な開発に伴い、ますます多くの企業や個人がフロントエンド開発に Vue3+TS+Vite を使用し始めています。しかし、それに伴うセキュリティリスクも人々の注目を集めています。この記事では、いくつかの一般的なフロントエンド セキュリティの問題について説明し、Vue3+TS+Vite の開発プロセス中にフロントエンド セキュリティを保護する方法に関するいくつかのヒントを共有します。入力の検証 ユーザー入力は、多くの場合、フロントエンドのセキュリティ脆弱性の主な原因の 1 つです。存在する

PHP と Vue: フロントエンド開発ツールの完璧な組み合わせ PHP と Vue: フロントエンド開発ツールの完璧な組み合わせ Mar 16, 2024 pm 12:09 PM

PHP と Vue: フロントエンド開発ツールの完璧な組み合わせ 今日のインターネットの急速な発展の時代において、フロントエンド開発はますます重要になっています。 Web サイトやアプリケーションのエクスペリエンスに対するユーザーの要求がますます高まっているため、フロントエンド開発者は、より効率的で柔軟なツールを使用して、応答性の高いインタラクティブなインターフェイスを作成する必要があります。フロントエンド開発の分野における 2 つの重要なテクノロジーである PHP と Vue.js は、組み合わせることで完璧なツールと見なされます。この記事では、PHP と Vue の組み合わせと、読者がこれら 2 つをよりよく理解し、適用できるようにするための詳細なコード例について説明します。

フロントエンドの面接官からよく聞かれる質問 フロントエンドの面接官からよく聞かれる質問 Mar 19, 2024 pm 02:24 PM

フロントエンド開発のインタビューでは、HTML/CSS の基本、JavaScript の基本、フレームワークとライブラリ、プロジェクトの経験、アルゴリズムとデータ構造、パフォーマンスの最適化、クロスドメイン リクエスト、フロントエンド エンジニアリング、デザインパターン、新しいテクノロジーとトレンド。面接官の質問は、候補者の技術スキル、プロジェクトの経験、業界のトレンドの理解を評価するように設計されています。したがって、候補者はこれらの分野で自分の能力と専門知識を証明するために十分な準備をしておく必要があります。

Django はフロントエンドですか、バックエンドですか?それをチェックしてください! Django はフロントエンドですか、バックエンドですか?それをチェックしてください! Jan 19, 2024 am 08:37 AM

Django は、迅速な開発とクリーンなメソッドを重視した Python で書かれた Web アプリケーション フレームワークです。 Django は Web フレームワークですが、Django がフロントエンドなのかバックエンドなのかという質問に答えるには、フロントエンドとバックエンドの概念を深く理解する必要があります。フロントエンドはユーザーが直接対話するインターフェイスを指し、バックエンドはサーバー側プログラムを指し、HTTP プロトコルを通じてデータと対話します。フロントエンドとバックエンドが分離されている場合、フロントエンドとバックエンドのプログラムをそれぞれ独立して開発して、ビジネス ロジックとインタラクティブ効果、およびデータ交換を実装できます。

Vue3+TS+Vite 開発スキル: ウィジェットとプラグインの開発方法 Vue3+TS+Vite 開発スキル: ウィジェットとプラグインの開発方法 Sep 10, 2023 pm 07:30 PM

Vue3 は Vue.js の最新バージョンであり、多くの新機能と改善が導入されており、開発者は柔軟な Web アプリケーションをより効率的に構築できます。 Vue3 では、TypeScript (TS) を Vue とシームレスに統合でき、強力な型チェック機能を提供します。 Vite は、高速なコールド スタート時間と高速なホット モジュール アップデートを備えた軽量の ES モジュール ベースの開発ツールです。この記事では、Vue3、TS、Vite を使用してウィジェットを作成し、

See all articles