この記事では、vue3.0 の新機能と使用法の概要を紹介します。これには、いくつかの新しい変更点と、使用できなくなった以前の構文が含まれています。皆様のお役に立てれば幸いです。
1. Vue3 による新しい変更
-
パフォーマンスの向上 (コストゼロ: vue2 から vue3 に切り替えることで実現できます) )
最初のレンダリングの高速化、差分アルゴリズムの高速化、メモリ使用量の削減、パッケージ サイズの縮小など....
Typescript サポートの向上 (vue では、より便利です)以下に TS を書きます)
コードを記述するための新しい方法を提供します: コンポジション API
2. これらの Vue2.0 構文は次のとおりです。
vue3.0 は、バージョン 2.0 のほとんどの構文と互換性があります (以前はどのように記述されていたか、現在は通常どおりに記述されています)。ただし、いくつかの破壊的な構文更新もあります。これに特に注意してください:
1. vue インスタンスの $on メソッドを削除しました (eventBusVue.prototype.$eventBus=new Vue(); this.$on('event name' , callback)
既存の実装モードはサポートされなくなったため、サードパーティのプラグインに置き換えることができます。 vue2 でのeventBusの使用法は次のとおりです。
Vue.prototype.$eventBus = new Vue() 组件1 this.$on('事件名', 回调) 组件2 this.$emit('事件名')
2. フィルタ オプションを削除します。 vue2 でのフィルターの使用法は次のとおりです。
<div>{{ msg | format}}</div> 插值表达式里, 不能再使用过滤器filter, 可以使用methods替代 {{format(msg)}}
3. .sync 構文を削除します (.sync 修飾子は v-bind では使用できません。現在、v-model 構文とマージされています)。以下は、vue2
<el-dialog></el-dialog>
3 での .sync の使用法です。vue2 プロジェクトと 3 プロジェクトの違いは、
主に 3 つの場所に依存します:
package.json
main.js
app.vue
package.json
まず、依存関係構成項目に表示されている package.json
ファイルを見てみましょう。現在使用しているバージョンは 3
"dependencies": { "core-js": "^3.6.5", "vue": "^3.2.25" // 版本号 }
main.js です。
次に、##main.js エントリ ファイルを開くと、以前の新しいキーワードのインスタンス化から createApp メソッドの呼び出し形式まで、Vue のインスタンス化にいくつかの変更が加えられていることがわかります。
import Vue from 'vue' import App from './App.vue' new Vue({render: h => h(App)}).$mount('#app')vue3.x での書き込み:
import { createApp } from 'vue' import App from './App.vue' // 根组件 createApp(App).mount('#app')app.vueapp.vue を開いて、vue3 を見つけます。 0 の単一ファイル コンポーネント
<template> <img src="/static/imghwm/default1.png" data-src="./assets/logo.png" class="lazy" alt="Vue3.0 の新機能と使用法の概要 (整理および共有)" > <helloworld></helloworld> </template>4 に一意のルート要素を持つことは必須ではなくなりました。API とオプション APIComposition API (Composition API) は、開発者にとって vue3 の最も重要な要素です。これは非常に大きなアップデートです。
Vue2 オプション API、オプション API (図)、Vue3 結合 API、構成 API (右側の図):
、オプション API: 利点:
理解しやすく、使いやすい。各オプション(設定項目)は記述位置が決まっているため(例:データオプションにデータを記述する、メソッドに操作方法を記述する等)
デメリット:
アプリケーションが大きい その後、コードを見つけるために行ったり来たり、つまり水平方向にジャンプするというジレンマに誰もが遭遇したことがあると思います。
Vue3 コンポジション API、コンポジション API: 機能:
- 特定の機能に関連するすべてがまとめられています。機能Aに関するレスポンシブデータやデータの操作方法などがまとめられているため、アプリケーションがどんなに大きくても、ある機能に関連するコードがすぐに見つけられ、メンテナンスも容易です
- 関数が複雑でコード量が多い場合には、論理分割処理を行うことも可能です。
##概要:
結合 API の起源。 vue3 は新しいコード記述方法を提供するため (古い方法も使用可能)、vue2 と区別するために異なる名前が付けられています。
Vue2 オプション API (option api) 利点: シンプル、各オプション独自の機能を実行する; デメリット: 関数の再利用に不便; 関数コードが分散して保守され、コードがジャンプする Vue3 合成 API (composition api) メリット: 関数コードの組み合わせが保守され、関数の再利用に便利;4. セットアップ セットアップ関数は新しいコンポーネント オプションであり、コンポーネント
- # で結合された API の開始点 (エントリ) として機能します。 ##これはセットアップでは使用できません。未定義を指します
-
セットアップ関数はコンポーネントの初期化時に 1 回だけ実行されます
-
セットアップ関数は、beforeCreate ライフサイクル フックが実行される前に実行されます。
-
setup() { console.log('setup....', this) }, beforeCreate() { console.log('beforeCreate') // 它比setup迟 }
セットアップ パラメーター:
setup を使用する場合、2 つのパラメータを受け入れます。 :
props: props は、親コンポーネントによって渡されたすべての prop データを含むオブジェクトです。
context: context对象包含了attrs,slots, emit属性
返回值
这个函数的返回值是一个对象,在模版中需要使用的数据和函数,需要在这个对象中声明(如果在data()中也定义了同名的数据,则以setup()中为准)。
<template> <div> 姓名:{{name}},月薪:{{salary}} <button>打个招呼</button> </div> </template> <script> export default { setup () { console.log('setup执行了,这里没有this. this的值是:', this) // 定义数据和函数 const name = '小吴' const salary = 18000 const say = () => { console.log('我是', name) } // 返回对象,给视图使用 return { msg , say} }, beforeCreate() { console.log('beforeCreate执行了, 这里有this,this的值是:', this) } } </script>
setup 中接受的props
是响应式的, 当传入新的 props 时,会及时被更新。由于是响应式的, 所以不可以使用 ES6 解构,解构会消除它的响应式。 错误代码示例, 这段代码会让 props 不再支持响应式:
export default com ({ setup(props, context) { const { uname } = props console.log(uname) }, })
开发中我们想要使用解构,还能保持props
的响应式,有没有办法解决呢?setup接受的第二个参数context,我们前面说了setup中不能访问 Vue2 中最常用的this对象,所以context中就提供了this中最常用的三个属性:attrs、slot 和emit,分别对应 Vue2.x 中的 $attrs属性、slot 插槽 和$emit发射事件。并且这几个属性都是自动同步最新的值,所以我们每次使用拿到的都是最新值。
5、reactive、ref 与 toRefs
在 vue2.x 中, 定义数据都是在data中, 但是 Vue3.x 可以使用 reactive 和 ref 来进行数据定义。
如何取舍ref和reactive?
定义响应式数据有两种方式:
-
ref函数(可以处理简单数据,也可以处理复杂数据),常用于将简单数据类型定义为响应式数据
在代码中修改(或者获取)值时,需要补上.value
在模板中使用时,可以省略.value
reactive函数,常用于将复杂数据类型为响应式数据
推荐用法:
优先使用ref
如果明确知道对象中有什么属性,就使用reactive。例如,表单数据
接下来使用代码展示一下 ref、reactive的使用:
<template> <div> <p>{{ num }}</p> <p>姓名: {{ user.uname }}</p> <p>年龄: {{ user.age }}</p> </div> </template> <script> import { reactive, ref, toRefs } from "vue"; export default com({ setup() { const num = ref(0); const user = reactive({ uname: "vivian", age: 18}); setInterval(() => { num.value++; user.age++; }, 1000); return { year, user }; }, }); </script>
上面的代码中,我们绑定到页面是通过user.uname,user.age这样写感觉很繁琐,我们能不能直接将user中的属性解构出来使用呢? 答案是不能直接对user进行结构,这样会消除它的响应式,这里就和上面我们说props不能使用 ES6 直接解构就呼应上了。那我们就想使用解构后的数据怎么办,解决办法就是使用toRefs,
定义转换响应式中所有属性为响应式数据,通常用于解构|展开reactive定义对象, 简化我们在模板中的使用。
格式:
// 响应式数据:{ 属性1, 属性2 } let { 属性1, 属性2 } = toRefs(响应式数据)
具体使用方式如下:
<template> <div> <p>{{ num }}</p> <p>姓名: {{ uname }}</p> <p>年龄: {{ age }}</p> </div> </template> <script> import { defineComponent, reactive, ref, toRefs } from "vue"; export default com({ setup() { const num = ref(0); const user = reactive({ uname: "vivian", age: 18}); setInterval(() => { num.value++; user.age++; }, 1000); return { year, // 使用reRefs ...toRefs(user), }; }, }); </script>
增强版的结构赋值:在解构对象的同时,保留响应式的特点。
6、vue3.0生命周期钩子函数
setup创建实例前
onBeforeMount挂载DOM前
onMount挂载DOM后
BeforeUpdate 更新组件前
updated 更新组件后
onBeforeUnmount卸载销毁前
onUnmount 卸载销毁后
setup () { onBeforeMount(()=>{ console.log('DOM渲染前',document.querySelector('.container')) }) onMounted(()=>{ console.log('DOM渲染后1',document.querySelector('.container')) }) }
Vue3.x 还新增用于调试的钩子函数onRenderTriggered和onRenderTricked, 另外,Vue3.x 中的钩子是需要从 vue 中导入的:
import { defineComponent, onBeforeMount, onMounted, onBeforeUpdate,onUpdated, onBeforeUnmount, onUnmounted, onErrorCaptured, onRenderTracked,onRenderTriggered } from "vue"; export default defineComponent({ //beforeCreate和created是vue2的 beforeCreate() { console.log("--beforeCreate--") }, created() { console.log("--created--") }, setup() { console.log("--setup--") // vue3.x生命周期写在setup中 onBeforeMount(() => { console.log("--onBeforeMount--") }) onMounted(() => { console.log("--onMounted--"); }) // 调试哪些数据发生了变化 onRenderTriggered((event) =>{ console.log("--onRenderTriggered--",event) }) }, });
7、computed函数定义计算属性
格式:
import { computed } from 'vue' const 计算属性名 = computed(() => { return 相关计算结果 })
代码示例:
<template> <p>姓名:{{name}}, 公司:{{company}}, 月薪:{{salary}}, 年薪{{total}}</p> <button>月薪double</button> </template> <script> import { ref, computed } from 'vue' export default { name: 'App', setup () { // 定义响应式对象 const company = ref('DiDi') const name = ref('小王') const salary = ref(18000) const double = () => { salary.value *= 2 // ref数据要加.value } // 定义计算属性 const total = computed(() => 12 * salary.value) return { name, company, total, salary, double } } } </script>
总结:
vue3中的computed函数与vue2中的computed选项功能类似。
computed的入参是一个函数
作用:根据已有数据,产生新的响应式数据。
步骤:导入,定义,导出
computed的高级用法:
格式:
const 计算属性 = computed({ get () { // 当获取值自动调用 }, set (val) { // 当设置值自动调用,val会自动传入 } })
示例代码:
<template> <div> <p>小花, 月薪:{{salary}}, 年薪:{{total}}</p> <p>年薪:<input></p> <button>月薪double</button> </div> </template> <script> // reactive: 是除了ref之外的第二种申明响应式数据的方式 import { ref, computed } from 'vue' export default { setup () { const salary = ref(18000) const double = () => { salary.value *= 2 console.log(salary) } // 定义计算属性: 普通的写法:只使用了get // const total = computed(() => { // return stu.salary * 12 // }) // 定义计算属性: 高阶的写法:使用了get + set const total = computed({ get() { return salary.value * 12 }, set(val) { // 设置计算属性的值,会自动调用,并传入val console.log('要设置的值...', val) salary.value = val/12 } }) return { double, salary, total} } } </script>
总结:
计算属性两种用法
给computed传入函数,返回值就是计算属性的值
给computed传入对象,get获取计算属性的值,set监听计算属性改变
在v-model绑定计算属性:
<input v-model="total">
8、watch函数
基于响应式数据的变化执行回调逻辑,和vue2中的watch的应用场景完全一致。
步骤:
导入 import { watch } from 'vue'
开启监听。在setup函数中执行watch函数开启对响应式数据的监听
-
watch函数接收三个常规参数 watch(source, callback, [options])
-
第一个参数有三种取值:
对象,要监听的响应式数据
数组,每个元素是响应式数据
函数,返回你要监听变化的响应式数据
第二个参数是:响应式数据变化之后要执行的回调函数
第三个参数是: 一个对象,在里面配置是否开启立刻执行或者深度监听
-
<template> <div> {{stu}}, {{salary}} <button> do</button> </div> </template> <script> import { reactive, watch, ref } from 'vue' export default { setup() { const salary = ref(10000) const stu = reactive({ address: {city: 'wuhan'} }) // 1. 侦听-单个数据 watch(salary, (newVal, oldVal) => { console.log('监听单个数据', newVal, oldVal) }) // 侦听-单个数据 watch(stu, (newVal, oldVal) => { console.log('监听单个数据', newVal, oldVal) }) // 侦听-多个数据 watch([stu, salary], (newVal, oldVal) => { console.log('监听多个数据', newVal, oldVal) }) // 侦听对象的某个属性 watch(()=>stu.address , (newVal, oldVal) => { console.log('第一个参数是函数', newVal, oldVal) }, {deep: true, immediate: true} ) // 测试按钮,修改数据 const doSome = () => { salary.value +=1 stu.address.city = '' } return {stu, salary, doSome} } } </script>
总结:
作用:watch用来侦听数据的变化。
格式:watch(数据|数组|get函数,(新值,旧值)=>{回调处理逻辑}, {immediate:true|false, deep: true|false})
以上,我们了解了vue2和vue3使用方法的不同,关于组件通讯和插槽等可以看下一篇。
【相关推荐:《vue.js教程》】
以上がVue3.0 の新機能と使用法の概要 (整理および共有)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Netflixのフロントエンドテクノロジーでの選択は、主にパフォーマンスの最適化、スケーラビリティ、ユーザーエクスペリエンスの3つの側面に焦点を当てています。 1。パフォーマンスの最適化:Netflixは、Reactをメインフレームワークとして選択し、SpeedCurveやBoomerangなどのツールを開発して、ユーザーエクスペリエンスを監視および最適化しました。 2。スケーラビリティ:マイクロフロントエンドアーキテクチャを採用し、アプリケーションを独立したモジュールに分割し、開発効率とシステムのスケーラビリティを改善します。 3.ユーザーエクスペリエンス:Netflixは、Material-UIコンポーネントライブラリを使用して、A/Bテストとユーザーフィードバックを介してインターフェイスを継続的に最適化して、一貫性と美学を確保します。

netflixusesaCustomframeworkは、「ギボン」ビルトンリアクト、notreactorvuedirectly.1)チームエクスペリエンス:seice basedonfamperivity.2)projectomplerprojects:vueforsplerprojects、racefforcomplexones.3)customeforsneeds:reactofforsmorefloficailie.

Netflixは、主に、パフォーマンス、スケーラビリティ、開発効率、エコシステム、技術的な負債、およびフレームワーク選択におけるメンテナンスコストを考慮しています。 1。パフォーマンスとスケーラビリティ:JavaとSpringbootが選択され、大規模なデータと高い同時リクエストを効率的に処理します。 2。開発効率とエコシステム:Reactを使用して、フロントエンド開発効率を向上させ、その豊富なエコシステムを利用します。 3.技術的な負債とメンテナンスコスト:node.jsを選択してマイクロサービスを構築して、メンテナンスコストと技術的債務を削減します。

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

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

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

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

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


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

WebStorm Mac版
便利なJavaScript開発ツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

Dreamweaver Mac版
ビジュアル Web 開発ツール
