相關學習推薦:javascript影片教學
前端發展百花放,一技未熟百技出。 茫然不知何下手,關注小編勝百書。
近期工作感覺很忙,都沒有多少時間去寫文章,今天這篇文章主要是將自己前期學習Vue3.0
時候整理的一些筆記內容進行了總結,透過對本文的閱讀,你將可以自己完成Vue3.0
環境搭建,同時還會對Vue3.0
的一些新的特性進行了解,方便自己進行Vue3.0
的學習。本文首刊於公眾號【前端有的玩】,追蹤===
會了,還有更多面試題等你來刷喔。
本文所有的範例都使用
ant design vue2.0
實現,關於ant design vue2.0
請參考2x.antdv.com/docs/ vue/in…
初始化環境
在前面的文章中,我們透過vite
建立了一個開發環境,但實際上現在vite
並沒有完善到支撐一個完整專案的地步,所以本文我們依然選擇使用vue-cli
鷹架進行環境搭建。
小編使用的
vue-cli
版本是4.5.4
,如果您的版本比較舊可以透過npm update @vue/ cli
來升級鷹架版本,如果沒有安裝可以透過npm install @vue/cli -g
進行安裝
使用腳手架新項目
-
#在工作空間開啟終端(
cmd
),然後透過vue create my-vue3-test
指令初始化項目 - ##在第一步先選擇
Manually select features
,進行手動選擇功能
- #然後透過
Space
和上下鍵依序選擇
Choose Vue version Babel TypeScript Router Vuex CSS Pre-processors Linter/Formatter复制代码
然後回車- 然後提示選擇
- Vue
版本,選擇
3.x(Preview) - Use class -style component syntax?
選擇
n,即輸入
n然後回車
然後提示 - Use Babel alongside TypeScript,輸入
y `
- Use history mode for router
#輸入
n 然後 - css
預處理器選擇
Less - eslint
選擇
ESLint Prettier 然後是 - Lint on save
和
In dedicater config files 最後一路回車即可完成專案搭建
- Vue
cd my-vue3-test,然後執行
yarn serve即可啟動專案
http://localhost:8080/訪問項目
ant design vue
在當前Vue3.0正式版還未發布之際,國內比較有名的前端
UI庫中率先將
Vue3.0繼承到自家的
UI庫中的,
PC端主要是
ant-design -vue,行動端主要是
vant, 本文所有範例程式碼都會基於
ant-design-vue來進行,首先我們先安裝
ant-design-vue
- 安裝依賴
yarn add ant-design-vue@2.0.0-beta.6 yarn add babel-plugin-import -D复制代码
- #設定
ant-design-vue
進入專案根目錄,然後開啟按需載入
babel.config.js
文件,將裡面的內容修改為
module.exports = { presets: ["@vue/cli-plugin-babel/preset"], plugins: [ // 按需加载 [ "import", // style 为 true 加载 less文件 { libraryName: "ant-design-vue", libraryDirectory: "es", style: "css" } ] ] };复制代码
- 嘗試使用
vue3 antdv
#來新增一個小頁面, 我們直接將
views/Home.vue文件裡面的程式碼替換為
<template> <a-form layout="inline" :model="state.form"> <a-form-item> <a-input v-model:value="state.form.user" placeholder="Username"> <template v-slot:prefix ><UserOutlined style="color:rgba(0,0,0,.25)" /></template> </a-input> </a-form-item> <a-form-item> <a-input v-model:value="state.form.password" type="password" placeholder="Password" > <template v-slot:prefix ><LockOutlined style="color:rgba(0,0,0,.25)" /></template> </a-input> </a-form-item> <a-form-item> <a-button type="primary" :disabled="state.form.user === '' || state.form.password === ''" @click="handleSubmit" > 登录 </a-button> </a-form-item> </a-form></template><script>import { UserOutlined, LockOutlined } from "@ant-design/icons-vue";import { Form, Input, Button } from "ant-design-vue";import { reactive } from "vue";export default { components: { UserOutlined, LockOutlined, [Form.name]: Form, [Form.Item.name]: Form.Item, [Input.name]: Input, [Button.name]: Button }, setup() { const state = reactive({ form: { user: "", password: "" } }); function handleSubmit() { console.log(state.form); } return { state, handleSubmit }; } };</script>复制代码
然後重啟一下項目,就可以發現已經可以正常使用ant- design-vue
了。
Vue3.0的問世,最吸引大家注意力的便是
Vue3 .0的
Composition API,對於
Componsition API,可以說是兩極化特別嚴重,一部分人特別喜歡這個新的設計與開發方式,而另一部分人則感覺使用
Composition API很容易寫出來義大利麵式的程式碼(可能這部分人不知道蘭州拉麵吧)。到底
Composition API是好是壞,小編不做評論,反正我只是一個搬磚的。而本小節介紹的
setup就是
Composition API的入口。
setup介绍
setup
是Vue3.0
提供的一个新的属性,可以在setup
中使用Composition API
,在上面的示例代码中我们已经使用到了setup
,在上文代码中我们在setup
中通过reactive
初始化了一个响应式数据,然后通过return
返回了一个对象,对象中包含了声明的响应式数据和一个方法,而这些数据就可以直接使用到了template
中了,就像上文代码中的那样。关于reactive
,我将会在下一小节为你带来说明。
setup 的参数说明
setup
函数有两个参数,分别是props
和context
。
-
props
props
是setup
函数的第一个参数,是组件外部传入进来的属性,与vue2.0
的props
基本是一致的,比如下面代码export default { props: { value: { type: String, default: "" } }, setup(props) { console.log(props.value) } }复制代码
但是需要注意的是,在
setup
中,props
是不能使用解构的,即不能将上面的代码改写成setup({value}) { console.log(value) }复制代码
虽然
template
中使用的是setup
返回的对象,但是对于props
,我们不需要在setup
中返回,而是直接可以在template
使用,比如上面的value
,可以直接在template
写成<custom-component :value="value"></custom-component>复制代码
-
context
context
是setup
函数的第二个参数,context
是一个对象,里面包含了三个属性,分别是-
attrs
attrs
与Vue2.0
的this.$attrs
是一样的,即外部传入的未在props
中定义的属性。对于attrs
与props
一样,我们不能对attrs
使用es6
的解构,必须使用attrs.name
的写法 -
slots
slots
对应的是组件的插槽,与Vue2.0
的this.$slots
是对应的,与props
和attrs
一样,slots
也是不能解构的。 -
emit
emit
对应的是Vue2.0
的this.$emit
, 即对外暴露事件。
-
setup 返回值
setup
函数一般会返回一个对象,这个对象里面包含了组件模板里面要使用到的data
与一些函数或者事件,但是setup
也可以返回一个函数,这个函数对应的就是Vue2.0
的render
函数,可以在这个函数里面使用JSX
,对于Vue3.0
中使用JSX
,小编将在后面的系列文章中为您带来更多说明。
最后需要注意的是,不要在
setup
中使用this
,在setup
中的this
和你真正要用到的this
是不同的,通过props
和context
基本是可以满足我们的开发需求的。
了解Composition API
,先从reactive
和ref
开始
在使用Vue2.0
的时候,我们一般声明组件的属性都会像下面的代码一样
export default { data() { return { name: '子君', sex: '男' } } }复制代码
然后就可以在需要用到的地方比如computed
,watch
,methods
,template
等地方使用,但是这样存在一个比较明显的问题,即我声明data
的地方与使用data
的地方在代码结构中可能相距很远,有一种君住长江头,我住长江尾,日日思君不见君,共饮一江水
的感觉。而Composition API
的诞生的一个很重要的原因就是解决这个问题。在尤大大在关于Composition API
的动机中是这样描述解决的问题的:
- 随着功能的增长,复杂组件的代码变得越来越难以阅读和理解。这种情况在开发人员阅读他人编写的代码时尤为常见。根本原因是 Vue 现有的 API 迫使我们通过选项组织代码,但是有的时候通过逻辑关系组织代码更有意义。
- 目前缺少一种简洁且低成本的机制来提取和重用多个组件之间的逻辑。
现在我们先了解一下Compositon API
中的reactive
和ref
介绍reactive
在Vue2.6
中, 出现了一个新的api
,Vue.observer
,通过这个api
可以创建一个响应式的对象,而reactive
就和Vue.ovserver
的功能基本是一致的。首先我们先来看一个例子
<template> <!--在模板中通过state.name使用setup中返回的数据--> <p>{{ state.name }}</p></template><script>import { reactive } from "vue";export default { setup() { // 通过reactive声明一个可响应式的对象 const state = reactive({ name: "子君" }); // 5秒后将子君修改为 前端有的玩 setTimeout(() => { state.name = "前端有的玩"; }, 1000 * 5); // 将state添加到一个对象中然后返回 return { state }; } };</script>复制代码
上面的例子就是reactive
的一个基本的用法,我们通过上面的代码可以看到reactive
和Vue.observer
声明可响应式对象的方法是很像的,但是他们之间还是存在一些差别的。我们在使用vue2.0
的时候,最常见的一个问题就是经常会遇到一些数据明明修改了值,但是界面却并没有刷新,这时候就需要使用Vue.set
来解决,这个问题是因为Vue2.0
使用的Object.defineProperty
无法监听到某些场景比如新增属性,但是到了Vue3.0
中通过Proxy
将这个问题解决了,所以我们可以直接在reactive
声明的对象上面添加新的属性,一起看看下面的例子
<template> <p> <p>姓名:{{ state.name }}</p> <p>公众号:{{ state.gzh }}</p> </p></template> <script> import { reactive } from "vue"; export default { setup() { const state = reactive({ name: "子君" }); // 5秒后新增属性gzh 前端有的玩 setTimeout(() => { state.gzh = "前端有的玩"; }, 1000 * 5); return { state }; } }; </script>复制代码
上面的例子虽然在state
中并没有声明gzh
属性,但是在5s
后我们可以直接给state
添加gzh
属性,这时候并不需要使用Vue.set
来解决新增属性无法响应的问题。
在上面的代码中,reactive
通过传入一个对象然后返回了一个state
,需要注意的是state
与传入的对象是不用的,reactive
对原始的对象并没有进行修改,而是返回了一个全新的对象,返回的对象是Proxy
的实例。需要注意的是在项目中尽量去使用reactive
返回的响应式对象,而不是原始对象。
const obj = {}const state = reactive(obj)// 输出falseconsole.log(obj === state)复制代码
介绍ref
假如现在我们需要在一个函数里面声明用户的信息,那么我们可能会有两种不一样的写法
// 写法1let name = '子君'let gzh = '前端有的玩'// 写法2let userInfo = { name: '子君', gzh: '前端有的玩'}复制代码
上面两种不同的声明方式,我们使用的时候也是不同的,对于写法1
我们直接使用变量就可以了,而对于写法2
,我们需要写成userInfo.name
的方式。我们可以发现userInfo
的写法与reactive
是比较相似的,而Vue3.0
也提供了另一种写法,就像写法1
一样,即ref
。先来看一个例子。
<template> <p> <p>姓名:{{ name }}</p> </p></template> <script> import { ref } from "vue"; export default { setup() { const name = ref("子君"); console.log('姓名',name.value) // 5秒后修改name为 前端有的玩 setTimeout(() => { name.value = "前端有的玩"; }, 1000 * 5); return { name }; } }; </script>复制代码
通过上面的代码,可以对比出来reactive
与ref
的区别
-
reactive
传入的是一个对象,返回的是一个响应式对象,而ref
传入的是一个基本数据类型(其实引用类型也可以),返回的是传入值的响应式值 -
reactive
获取或修改属性可以直接通过state.prop
来操作,而ref
返回值需要通过name.value
的方式来修改或者读取数据。但是需要注意的是,在template
中并不需要通过.value
来获取值,这是因为template
中已经做了解套。
在Vue3.0
优雅的使用v-model
v-model
并不是vue3.0
新推出的新特性,在Vue2.0
中我们已经大量的到了v-model
,但是V3
和V2
还是有很大的区别的。本节我们将主要为大家带来如何在Vue3.0
中使用v-model
,Vue3.0
中的v-model
提供了哪些惊喜以及如何在Vue3.0
中自定义v-model
。
在Vue2.0
和Vue3.0
中使用v-model
在Vue2.0
中如何实现双向数据绑定呢?常用的方式又两种,一种是v-model
,另一种是.sync
,为什么会有两种呢?这是因为一个组件只能用于一个v-model
,但是有的组件需要有多个可以双向响应的数据,所以就出现了.sync
。在Vue3.0
中为了实现统一,实现了让一个组件可以拥有多个v-model
,同时删除掉了.sync
。如下面的代码,分别是Vue2.0
与Vue3.0
使用v-model
的区别。
-
在
Vue2.0
中使用v-model
<template> <a-input v-model="value" placeholder="Basic usage" /></template><script>export default { data() { return { value: '', }; }, };</script>复制代码
-
在
Vue3.0
中使用v-model
<template> <!--在vue3.0中,v-model后面需要跟一个modelValue,即要双向绑定的属性名--> <a-input v-model:value="value" placeholder="Basic usage" /></template><script>export default { // 在Vue3.0中也可以继续使用`Vue2.0`的写法 data() { return { value: '', }; }, };</script>复制代码
在
vue3.0
中,v-model
后面需要跟一个modelValue
,即要双向绑定的属性名,Vue3.0
就是通过给不同的v-model
指定不同的modelValue
来实现多个v-model
。对于v-model
的原理,下文将通过自定义v-model
来说明。
自定义v-model
使用Vue2.0
自定义一个v-model
示例
- 组件代码
<template> <p class="custom-input"> <input :value="value" @input="$_handleChange" /> </p></template><script>export default { props: { value: { type: String, default: '' } }, methods: { $_handleChange(e) { this.$emit('input', e.target.value) } } }</script>复制代码
-
在代码中使用组件
<template> <custom-input v-model="value"></custom-input></template><script> export default { data() { return { value: '' } } }</script>复制代码
在
Vue2.0
中我们通过为组件设置名为value
属性同时触发名为input
的事件来实现的v-model
,当然也可以通过model
来修改属性名和事件名,可以看我以前的文章中有详解。
使用Vue3.0
自定义一个v-model
示例
-
组件代码
<template> <p class="custom-input"> <input :value="value" @input="_handleChangeValue" /> </p></template><script>export default { props: { value: { type: String, default: "" } }, name: "CustomInput", setup(props, { emit }) { function _handleChangeValue(e) { // vue3.0 是通过emit事件名为 update:modelValue来更新v-model的 emit("update:value", e.target.value); } return { _handleChangeValue }; } };</script>复制代码
-
在代码中使用组件
<template> <!--在使用v-model需要指定modelValue--> <custom-input v-model:value="state.inputValue"></custom-input></template><script>import { reactive } from "vue";import CustomInput from "../components/custom-input";export default { name: "Home", components: { CustomInput }, setup() { const state = reactive({ inputValue: "" }); return { state }; } };</script>复制代码
到了
Vue3.0
中,因为一个组件支持多个v-model
,所以v-model
的实现方式有了新的改变。首先我们不需要使用固定的属性名和事件名了,在上例中因为是input
输入框,属性名我们依然使用的是value
,但是也可以是其他任何的比如name
,data
,val
等等,而在值发生变化后对外暴露的事件名变成了update:value
,即update:属性名
。而在调用组件的地方也就使用了v-model:属性名
来区分不同的v-model
。 -
总结
在本文中我们主要讲解了开发环境的搭建,setup
,reactive
,ref
,v-model
等的介绍,同时通过对比Vue3.0
与Vue2.0
的不同,让大家对Vue3.0
有了一定的了解,在下文中我们将为大家带来更多的介绍,比如技术属性,watch
,生命周期等等,敬请期待。本文首发于公众号【前端有的玩】,学习Vue
,面试刷题,尽在【前端有的玩】,乘兴裸辞心甚爽,面试工作屡遭难。 幸得每日一题伴,点击关注莫偷懒。
,下周一新文推送,不见不散。
结语
不要吹灭你的灵感和你的想象力; 不要成为你的模型的奴隶。 ——文森特・梵高
想了解更多编程学习,敬请关注php培训栏目!
以上是使用Vue3.0收穫的知識點(一)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

JavaScript框架的強大之處在於簡化開發、提升用戶體驗和應用性能。選擇框架時應考慮:1.項目規模和復雜度,2.團隊經驗,3.生態系統和社區支持。

引言我知道你可能會覺得奇怪,JavaScript、C 和瀏覽器之間到底有什麼關係?它們之間看似毫無關聯,但實際上,它們在現代網絡開發中扮演著非常重要的角色。今天我們就來深入探討一下這三者之間的緊密聯繫。通過這篇文章,你將了解到JavaScript如何在瀏覽器中運行,C 在瀏覽器引擎中的作用,以及它們如何共同推動網頁的渲染和交互。 JavaScript與瀏覽器的關係我們都知道,JavaScript是前端開發的核心語言,它直接在瀏覽器中運行,讓網頁變得生動有趣。你是否曾經想過,為什麼JavaScr


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

記事本++7.3.1
好用且免費的程式碼編輯器

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

禪工作室 13.0.1
強大的PHP整合開發環境