前端发展百花放,一技未熟百技出。

茫然不知何下手,关注小编胜百书。

近期工作感觉很忙,都没有多少时间去写文章,今天这篇文章主要是将自己前期学习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

最后一路回车即可完成项目搭建

启动项目

新建完项目之后,进入到项目中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文件里面的代码替换为

>

/>

v-model:value="state.form.password"

type="password"

placeholder="Password"

>

>

/>

type="primary"

:disabled="state.form.user === '' || state.form.password === ''"

@click="handleSubmit"

>

登录

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

};

}

};复制代码

然后重启一下项目,就可以发现已经可以正常使用ant-design-vue了。

Vue3.0新体验之setup

对于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写成复制代码

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的功能基本是一致的。首先我们先来看一个例子

{{ state.name }}

复制代码

上面的例子就是reactive的一个基本的用法,我们通过上面的代码可以看到reactive和Vue.observer声明可响应式对象的方法是很像的,但是他们之间还是存在一些差别的。我们在使用vue2.0的时候,最常见的一个问题就是经常会遇到一些数据明明修改了值,但是界面却并没有刷新,这时候就需要使用Vue.set来解决,这个问题是因为Vue2.0使用的Object.defineProperty无法监听到某些场景比如新增属性,但是到了Vue3.0中通过Proxy将这个问题解决了,所以我们可以直接在reactive声明的对象上面添加新的属性,一起看看下面的例子

姓名:{{ state.name }}

公众号:{{ state.gzh }}

import { reactive } from "vue";

export default {

setup() {

const state = reactive({

name: "子君"

});

// 5秒后新增属性gzh 前端有的玩

setTimeout(() => {

state.gzh = "前端有的玩";

}, 1000 * 5);

return {

state

};

}

};

复制代码

上面的例子虽然在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。先来看一个例子。

姓名:{{ name }}

import { ref } from "vue";

export default {

setup() {

const name = ref("子君");

console.log('姓名',name.value)

// 5秒后修改name为 前端有的玩

setTimeout(() => {

name.value = "前端有的玩";

}, 1000 * 5);

return {

name

};

}

};

复制代码

通过上面的代码,可以对比出来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

data() { return { value: '',

};

},

};复制代码在Vue3.0中使用v-model

data() { return { value: '',

};

},

};复制代码

在vue3.0中,v-model后面需要跟一个modelValue,即要双向绑定的属性名,Vue3.0就是通过给不同的v-model指定不同的modelValue来实现多个v-model。对于v-model的原理,下文将通过自定义v-model来说明。

自定义v-model

使用Vue2.0自定义一个v-model示例组件代码

复制代码在代码中使用组件复制代码

在Vue2.0中我们通过为组件设置名为value属性同时触发名为input的事件来实现的v-model,当然也可以通过model来修改属性名和事件名,可以看我以前的文章中有详解。

使用Vue3.0自定义一个v-model示例组件代码

复制代码在代码中使用组件复制代码

到了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,使用Vue3.0收获的知识点(一)相关推荐

  1. Vue3.0系列(一): VUE3.0的新特性

    和Vue2.0 相比,Vue3.0有哪些亮点: 序号 特性 解析 1 Performance 性能上比Vue2.0快1.3-2倍 2 Tree shaking support 按需编译,体积更加轻量化 ...

  2. 创建VUE项目,vue-cli2.0版本和3.0版本的区别,将vue2.0项目升级为vue3.0项目

    创建VUE项目,vue-cli2.0版本和3.0版本的区别,将vue2.0项目升级为vue3.0项目 使用vue-cli2.0版本创建vue项目 创建前的准备 开始创建 创建过程 项目正常创建 使用v ...

  3. 卸载vuecli3_卸载vue2.0并升级vue_cli3.0的实例讲解

    今天来学习vue3.0,之前使用的是vue2.0现在用3.0的话你可以升级,也可以卸载再重装.我这里就是卸载重装啦. 第一步我们卸载全局的vue2.0 .你需要先通过 npm uninstall vu ...

  4. 看完后完全了解 Vue 2.0 和 Vue 3.0 的区别

    1.数据的双向绑定 Vue2.0使用Object.defineProperty 原理:通过使用 Object.defineProperty 来劫持对象属性的 geter 和 seter 操作,当数据发 ...

  5. Vue3学习之旅--Vue3高级语法补充-自定义指令,vue插件,Teleport......

    文章目录 Vue3高级语法补充 自定义指令 认识自定义指令 实现方式一:默认实现 实现方式二:局部自定义指令 方式三:自定义全局指令 指令的生命周期 指令的参数和修饰符 自定义指令练习 时间格式化指令 ...

  6. 猿创征文 | 开箱即用 yyg-cli:快速创建 vue3 组件库和vue3 全家桶项目

    1 yyg-cli 是什么 yyg-cli 是优雅哥开发的快速创建 vue3 项目的脚手架.在 npm 上发布了两个月,11月1日进行了大升级,发布 1.1.0 版本:支持创建 vue3 全家桶项目和 ...

  7. 【安装教程】Ubuntu18.04中用CMake-gui安装OpenCV4.1.0和OpenCV_contrib-4.1.0(图文)

    目录 一.简要说明 二.下载和添加依赖包 三.配置OpenCV 四.配置环境变量 新建一个 opecv.pc (勾选了就跳过此步骤,勾选生成的opencv4.pc 我印象中好像不用修改的,不放心可以打 ...

  8. 从 Web 1.0到Web 3.0:详析这些年互联网的发展及未来方向

    作者 | hello 翻译 | 天道酬勤,责编 | Carol 来源 | 知行之录 去年,Web 迎来了30岁生日. Web 的发明者蒂姆·伯纳斯·李(Tim Berners-Lee)借此机会宣布,他 ...

  9. Djang1.8+Python2.0迁移到Django2.0+Python3.6注意事项(转)

    Djang1.8+Python2.0迁移到Django2.0+Python3.6注意事项 参考:https://blog.csdn.net/weixin_40475396/article/detail ...

  10. mysql 8.0 docker_Docker安装MySQL8.0的实现方法

    环境:MacOS_Cetalina_10.15.1.Mysql8.0.18.Docker_2.0.0.3 1.docker仓库搜索mysql docker search mysql 2.docker仓 ...

最新文章

  1. gatsby_将您的GraphCMS数据导入Gatsby
  2. 关于javascript:void(0);,herf=”#”以及在IE6下,click事件失效的问题
  3. 便携式计算机的工作原理,便携式计算机及控制该计算机的方法
  4. Baseline管理
  5. java for(o t :object) 获取顺序号_JAVA泛型通配符T,E,K,V区别 瞬间豁然开朗
  6. 疑似小米11系列旗舰跑分曝光:骁龙875性能突破天际
  7. 超详细,Wireshark 3.6.3安装教程(Windows系统)
  8. Apollo开发平台授权管理的使用
  9. js三大系列之二scroll
  10. ‘ssh-keygen‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  11. 【遥感微课堂】学习ENVI5.0
  12. 怎么把word目录里面的“目录”两个字去掉
  13. ununtu18.0安装搜狗输入法
  14. RTEC机器人_广东省中小学电脑机器人活动获奖结果公布
  15. 你的企业如何才能留住员工?
  16. C# Control.Refresh的解释是什么意思?
  17. vb.net 教程 20-3 控制Ie浏览器 3 获得Ie窗口句柄
  18. Python操纵Word神器——python-docx大全(含插入pptx图表)
  19. 网络拓扑测绘之城域网拓扑
  20. 6 年 Java 老兵 BAT 面试心经

热门文章

  1. ROS编程(一)写一个最简单的发布者订阅者
  2. 用爬虫来爬取csdn大神的文章的url
  3. thanos 配置receive模式
  4. 实用的PHP功能详解(一)_php glob()用法
  5. SQL Server复制表数据到另一个表的方法
  6. java 设置word刷新_Java 设置Word中的表格自适应的3种方式
  7. matlab/simulink电力电子仿真单相变压器设置
  8. (一)目标检测-R-CNN模型
  9. H3C U200M 防火墙 bin文件丢失上传方法记录。
  10. OpenVR针对OptiTrack的支持方式