検索
ホームページウェブフロントエンドVue.jsVue3 ref で応答性の高い変数を構築できない問題を解決する方法

vue3 ref は応答変数の構築に失敗します

問題の説明

ref を使用して Vue3 で応答変数を宣言し、関数を使用して値を変更しますが、値を変更できませんResponsely

<template>
  <p>{{userName}}</p>
  <button @click=&#39;change()&#39;>change</button>
</template>

<script>
  //引入定义响应式数据的函数
  import {reactive} from &#39;vue&#39;;
  import {ref} from "@vue/reactivity"; //!!!!!注意,这里有个坑,ref必须是引用自vue,而非@vue/reactivity
  export default {
  name: &#39;App&#39;,
  //为Vue3的新特性提供统一入口,代码都会在这个函数中添加
  //在beforecreated之前进行,因此无法访问this,亦即无法访问data和method
  setup(){
    //定义响应式数据:数据变化,模板中渲染会自动刷新
    // const obj=reactive({
    //   userName:&#39;jack&#39;,
    // });
    //只定义一个变量,可以使用ref将变量定义为响应式
    let userName=ref(&#39;jack&#39;)
    console.log(userName);
    const change=()=> {
      userName.value=&#39;rose&#39;     //注意修改的是ref对象的value属性,但是在template中使用的时候不需要再加value
      console.log(userName);
    }

    return {userName,change}
  },
}
</script>

解決策

参照が

import {ref} from "@vue/reactivity"

の場合、応答がありませんが、## に変更するだけで済みます。 #

import {ref} from "vue"

vue3 レスポンシブ API ref と reactive

データの応答性を実現するために ref 関数と reactive 関数が使用されることがわかっています。しかし、開発においてrefとreactiveのどちらを選択すればよいのでしょうか? ref と reactive の違いについて話しましょう。

レビュー

Vue3 バージョンより前は、応答データはデータ関数で定義されていました

<template>
  <h2 id="nbsp-title-nbsp">{{ title }}</h2>
</template>
 
<script>
  export default {
    data() {
      return {
        title: "Hello, Vue!"
      };
    }
  };
</script>

Vue2 はデータ内のすべてのプロパティを走査し、Object.defineProperty を使用して各プロパティを変換しますgetter/setter に変換します。getter は依存関係の収集に使用され、setter は更新イベントの通知と公開の実行に使用されます。

Vue2 は、サブスクリプション発行モデルの仲介者としてプロパティごとに Dep オブジェクトを作成し、依存関係を収集します。 Vue はこれらの依存関係を追跡し、アクセスおよび変更されたときに変更を通知します。

Vue3

Vue3 では、応答性の高いデータを作成するために ref と reactive が導入されています。

<template>
  <h2 id="nbsp-title-nbsp">{{ title }}</h2>
  <h3 id="nbsp-data-author-nbsp">{{ data.author }}</h3>
  <button @click=""changeTitle>修改title</button>
</template>
 
<script>
  import { ref, reactive, toRefs } from "vue";
  export default {
    setup() {
      const title = ref("Hello, Vue 3!");
      // 修改
      function changeTitle(){
        title.value == "Hello, Vue3!"
      }
 
      const data = reactive({
        author: "青年码农",
        age: "18"
      });
 
      return { title, data, changeTitle };
    }
  };
</script>

おそらく、上記のコードとの違いがわかるでしょう。 ref の機能は、プリミティブ データ型をレスポンシブ データに変換することであり、String、Number、BigInt、Boolean、Symbol、Unknown、Null の 7 つのプリミティブ データ型があります。しかし、奇妙なトリックがあります。それは、ref がオブジェクトになることもできるということです。それについては後で話します。リアクティブの機能は、オブジェクトを応答オブジェクトに変換することです。

  • ref:

ref の機能は、プリミティブ データ型をデータ型に変換することです。応答付き 式属性のデータ型。

const title = ref("Hello, Vue 3!");
ref はパラメータを受け取り、value 属性を持つオブジェクトでラップして返します。この属性は、応答変数の値にアクセスしたり変更したりするために使用できます。たとえば、上記のコードでは次のように、count.value を使用して値を変更します:

title.value = "Hello, Vue3!"

上で述べたように、ref はオブジェクト型も受け入れることができます

const data = ref({
    author: "青年码农",
    age: "18"
});

これも可能ですが、次の場合は少し面倒になります。値の割り当て。

data.value.author = "nmgwap";

ref リアクティブ原則は Object.defineProperty() に依存しているため、オブジェクトの場合はリアクティブを使用することをお勧めします。

Vue3 ref で応答性の高い変数を構築できない問題を解決する方法

  • reactive:

reactive の反応性を返します。オブジェクトのコピー。参照の応答性を維持しながら、すべての深い参照を解凍します。一般に、オブジェクトまたは配列の応答性を実装するためにこれを使用します。

const data = reactive({
    author: "青年码农",
    age: "18"
});
変更と通常のオブジェクトに違いはありません。ビューはリアルタイムで更新されます

data.author = "nmgwap"

注:

refは元のデータ型とリアクティブ用です。どちらの API も、一般的な JavaScript データ型にリアクティブ性を与えるオブジェクトに使用されます。

以上がVue3 ref で応答性の高い変数を構築できない問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Netflixのフロントエンドの反応、Vue、および未来Netflixのフロントエンドの反応、Vue、および未来Apr 12, 2025 am 12:12 AM

Netflixは、主にReactをフロントエンドフレームワークとして使用し、特定の機能のためにVUEによって補足されます。 1)Reactのコンポーネント化と仮想DOMは、Netflixアプリケーションのパフォーマンスと開発効率を向上させます。 2)VueはNetflixの内部ツールと小規模プロジェクトで使用されており、その柔軟性と使いやすさが重要です。

フロントエンドのvue.js:実際のアプリケーションと例フロントエンドのvue.js:実際のアプリケーションと例Apr 11, 2025 am 12:12 AM

Vue.jsは、複雑なユーザーインターフェイスを構築するのに適した進歩的なJavaScriptフレームワークです。 1)そのコア概念には、レスポンシブデータ、コンポーネント、仮想DOMが含まれます。 2)実際のアプリケーションでは、TODOアプリケーションを構築し、Vuerouterを統合することで実証できます。 3)デバッグするときは、vuedevtools and Console.logを使用することをお勧めします。 4)パフォーマンスの最適化は、V-IF/V-Show、リストレンダリング最適化、コンポーネントの非同期負荷などを通じて達成できます。

Vue.jsとReact:重要な違​​いを理解するVue.jsとReact:重要な違​​いを理解するApr 10, 2025 am 09:26 AM

Vue.JSは中小企業から中規模のプロジェクトに適していますが、Reactは大規模で複雑なアプリケーションにより適しています。 1。VUE.JSのレスポンシブシステムは、依存関係追跡を介してDOMを自動的に更新し、データの変更を簡単に管理できるようにします。 2.反応は一方向のデータフローを採​​用し、データは親コンポーネントから子コンポーネントに流れ、明確なデータフローと簡単な抽出構造を提供します。

Vue.js vs. React:プロジェクト固有の考慮事項Vue.js vs. React:プロジェクト固有の考慮事項Apr 09, 2025 am 12:01 AM

VUE.JSは、中小規模のプロジェクトや迅速な反復に適していますが、Reactは大規模で複雑なアプリケーションに適しています。 1)Vue.jsは使いやすく、チームが不十分な状況やプロジェクトスケールが小さい状況に適しています。 2)Reactにはより豊富なエコシステムがあり、高性能で複雑な機能的ニーズを持つプロジェクトに適しています。

Vueにタグをジャンプする方法Vueにタグをジャンプする方法Apr 08, 2025 am 09:24 AM

VUEでタグのジャンプを実装する方法には、HTMLテンプレートでAタグを使用してHREF属性を指定する方法が含まれます。 VUEルーティングのルーターリンクコンポーネントを使用します。 JavaScriptでこれを使用します。$ router.push()メソッド。パラメーターはクエリパラメーターに渡すことができ、ルートは動的ジャンプのルーターオプションで構成されています。

VUEのコンポーネントジャンプを実装する方法VUEのコンポーネントジャンプを実装する方法Apr 08, 2025 am 09:21 AM

VUEでコンポーネントジャンプを実装するための次の方法があります。Router-Linkと&lt; router-view&gt;を使用してください。ハイパーリンクジャンプを実行し、ターゲットパスとして属性を指定するコンポーネント。 &lt; router-view&gt;を使用してください現在ルーティングされているレンダリングされているコンポーネントを表示するコンポーネント。プログラマティックナビゲーションには、router.push()およびrouter.replace()メソッドを使用します。前者は歴史を保存し、後者は記録を残さずに現在のルートに取って代わります。

VueのDivにジャンプする方法VueのDivにジャンプする方法Apr 08, 2025 am 09:18 AM

VUEにDIV要素をジャンプするには、VUEルーターを使用してルーターリンクコンポーネントを追加するには、2つの方法があります。 @clickイベントリスナーを追加して、これを呼び出します。$ router.push()メソッドをジャンプします。

ジャンプVUEによって価値を転送する方法ジャンプVUEによって価値を転送する方法Apr 08, 2025 am 09:15 AM

VUEにデータを渡す主な方法は2つあります。PROPS:一方向データバインディング、親コンポーネントから子コンポーネントにデータを渡します。イベント:イベントとカスタムイベントを使用してコンポーネント間でデータを渡します。

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

SublimeText3 Mac版

SublimeText3 Mac版

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

メモ帳++7.3.1

メモ帳++7.3.1

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

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン