データ宣言はこれまで非常に簡単でしたが、現在では使用できるヘルパー関数が多数あります。現在のルールは次のとおりです:
reactive
を使用して Object、Array、Map、Set
##ref を使用して
String、Number、Boolean を宣言します
reactive を使用すると、警告、値はリアクティブ データにはなりません。
/* DOES NOT WORK AS EXPECTED */ <script setup> import { reactive } from "vue"; const count = reactive(0); </script>
ref を使用して
Array を宣言すると、内部で
reactive が呼び出されます。
count プロパティを持つリアクティブ オブジェクトと、
count をインクリメントするボタンがあるとします。
<template> Counter: {{ state.count }} <button @click="add">Increase</button> </template> <script> import { reactive } from "vue"; export default { setup() { const state = reactive({ count: 0 }); function add() { state.count++; } return { state, add, }; }, }; </script>
/* DOES NOT WORK AS EXPECTED */ <template> <div>Counter: {{ count }}</div> <button @click="add">Increase</button> </template> <script> import { reactive } from "vue"; export default { setup() { const state = reactive({ count: 0 }); function add() { state.count++; } return { ...state, add, }; }, }; </script>
ref の奇妙なパターンの使用には慣れるのが難しい場合があります。
Ref値を受け取り、リアクティブ オブジェクトを返します。値は、オブジェクト内の
.value プロパティの下で使用できます。
const count = ref(0) console.log(count) // { value: 0 } console.log(count.value) // 0 count.value++ console.log(count.value) // 1
ref はテンプレート ファイルで使用すると解凍されるため、
.value は必要ありません。
<script setup> import { ref } from 'vue' const count = ref(0) function increment() { count.value++ } </script> <template> <button @click="increment"> {{ count }} // no .value needed </button> </template>
[object Object] を生成します。
// DON'T DO THIS <script setup> import { ref } from 'vue' const object = { foo: ref(1) } </script> <template> {{ object.foo + 1 }} // [object Object] </template>
.value を正しく使用するには時間がかかります。たまに使い方を忘れてしまうこともありますが、使う頻度はどんどん増えています。
emit を使用して親コンポーネントと通信できます。イベントをリッスンするカスタム イベント リスナーを追加するだけです。
// 子组件 this.$emit('my-event') // 父组件 <my-component @my-event="doSomething" />
defineEmits を使用して
emit を宣言する必要があります。
<script setup> const emit = defineEmits(['my-event']) emit('my-event') </script>
defineEmits も
defineProps もインポートする必要がないことです。これらは、
script setup を使用するときに自動的に使用可能になります。
<script setup> const props = defineProps({ foo: String }) const emit = defineEmits(['change', 'delete']) // setup code </script>
.native 修飾子を使用する必要はありません。実際、この修飾子は削除されています。
script setup ではサポートされていないプロパティがいくつかあります。
RFC で定義されているように、同じコンポーネント内に 2 つの異なるスクリプトをセットアップすることです。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;"><script>
export default {
name: &#39;CustomName&#39;,
inheritAttrs: false,
customOptions: {}
}
</script>
<script setup>
// script setup logic
</script></pre><div class="contentsignin">ログイン後にコピー</div></div>
リアクティブ トランスフォームの使用
を自動的に解凍し、.value
を廃止することです。しかし現在は廃止され、Vue 3.3 で削除される予定です。これはまだパッケージとして入手できますが、Vue コアの一部ではないため、時間を投資しないほうがよいでしょう。 非同期コンポーネントを定義する
const asyncModal = () => import('./Modal.vue')
Vue 3 以降、非同期コンポーネントは
defineAsyncComponent ヘルパー関数を使用して明示的に定義する必要があります。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;">import { defineAsyncComponent } from &#39;vue&#39;
const asyncModal = defineAsyncComponent(() => import(&#39;./Modal.vue&#39;))</pre><div class="contentsignin">ログイン後にコピー</div></div>
テンプレートでの冗長なラップされた要素の使用
<!-- Layout.vue --> <template> <div> <header>...</header> <main>...</main> <footer>...</footer> </div> </template>
複数のルート要素がサポートされるようになったので、これは必要なくなりました。 ????
<!-- Layout.vue --> <template> <header>...</header> <main v-bind="$attrs">...</main> <footer>...</footer> </template>
間違ったライフサイクルの使用
プレフィックスを追加するか、名前を完全に変更することによって、名前が変更されました。以下のグラフですべての変化を確認できます。
以上がVue3 で避けるべき間違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。