当前位置: 首页 > news >正文

网站制作多少网站排名优化化

网站制作多少,网站排名优化化,工业厂房设计,网站运营专员岗位要求1.Vue3简介 2020年9月18日#xff0c;Vue.js发布3.0版本#xff0c;代号#xff1a;One Piece#xff08;海贼王#xff09;耗时2年多、2600次提交、30个RFC、600次PR、99位贡献者github上的tags地址#xff1a;Release v3.0.0 One Piece vuejs/core GitHub 2.Vue3带…1.Vue3简介 2020年9月18日Vue.js发布3.0版本代号One Piece海贼王耗时2年多、2600次提交、30个RFC、600次PR、99位贡献者github上的tags地址Release v3.0.0 One Piece · vuejs/core · GitHub 2.Vue3带来了什么 1.性能的提升 打包大小减少41%初次渲染快55%, 更新渲染快133%内存减少54%...... 2.源码的升级 使用Proxy代替defineProperty实现响应式重写虚拟DOM的实现和Tree-Shaking...... 3.拥抱TypeScript Vue3可以更好的支持TypeScript 4.新的特性 Composition API组合API setup配置ref与reactivewatch与watchEffectprovide与inject...... 新的内置组件 FragmentTeleportSuspense 其他改变 新的生命周期钩子data 选项应始终被声明为一个函数移除keyCode支持作为 v-on 的修饰符...... 一、创建Vue3.0工程 1.使用 vue-cli 创建 官方文档创建一个项目 | Vue CLI ## 查看vue/cli版本确保vue/cli版本在4.5.0以上 vue --version ## 安装或者升级你的vue/cli npm install -g vue/cli ## 创建 vue create vue_test ## 启动 cd vue_test npm run serve 2.使用 vite 创建 官方文档快速上手 | Vue.js vite官网https://vitejs.cn 什么是vite—— 新一代前端构建工具。优势如下 开发环境中无需打包操作可快速的冷启动。轻量快速的热重载HMR。真正的按需编译不再等待整个应用编译完成。 传统构建 与 vite构建对比图 ## 创建工程 npm init vite-app project-name## 进入工程目录 cd project-name## 安装依赖 npm install ## 运行 npm run dev 二、常用 Composition API 官方文档: 组合式 API 常见问答 | Vue.js 1.拉开序幕的setup 理解Vue3.0中一个新的配置项值为一个函数。setup是所有Composition API组合API“ 表演的舞台 ”。组件中所用到的数据、方法等等均要配置在setup中。setup函数的两种返回值 若返回一个对象则对象中的属性、方法, 在模板中均可以直接使用。重点关注若返回一个渲染函数则可以自定义渲染内容。了解 注意点 尽量不要与Vue2.x配置混用 Vue2.x配置data、methos、computed...中可以访问到setup中的属性、方法。但在setup中不能访问到Vue2.x配置data、methos、computed...。如果有重名, setup优先。 setup不能是一个async函数因为返回值不再是return的对象, 而是promise, 模板看不到return对象中的属性。后期也可以返回一个Promise实例但需要Suspense和异步组件的配合 2.ref函数 作用: 定义一个响应式的数据语法: const xxx ref(initValue) 创建一个包含响应式数据的引用对象reference对象简称ref对象。JS中操作数据 xxx.value模板中读取数据: 不需要.value直接div{{xxx}}/div 备注 接收的数据可以是基本类型、也可以是对象类型。基本类型的数据响应式依然是靠Object.defineProperty()的get与set完成的。对象类型的数据内部 “ 求助 ” 了Vue3.0中的一个新函数—— reactive函数。 3.reactive函数 作用: 定义一个对象类型的响应式数据基本类型不要用它要用ref函数语法const 代理对象 reactive(源对象)接收一个对象或数组返回一个代理对象Proxy的实例对象简称proxy对象reactive定义的响应式数据是“深层次的”。内部基于 ES6 的 Proxy 实现通过代理对象操作源对象内部数据进行操作。 4.Vue3.0中的响应式原理 vue2.x的响应式 实现原理 对象类型通过Object.defineProperty()对属性的读取、修改进行拦截数据劫持。数组类型通过重写更新数组的一系列方法来实现拦截。对数组的变更方法进行了包裹。 存在问题 新增属性、删除属性, 界面不会更新。直接通过下标修改数组, 界面不会自动更新。 Object.defineProperty(data, count, {get () {}, set () {} }) Vue3.0的响应式 实现原理: 通过Proxy代理: 拦截对象中任意属性的变化, 包括属性值的读写、属性的添加、属性的删除 等。通过Reflect反射: 对源对象的属性进行操作。MDN文档中描述的Proxy与Reflect ProxyProxy - JavaScript | MDNReflectReflect - JavaScript | MDN new Proxy(data, {// 拦截读取属性值get (target, prop) {return Reflect.get(target, prop)},// 拦截设置属性值或添加新属性set (target, prop, value) {return Reflect.set(target, prop, value)},// 拦截删除属性deleteProperty (target, prop) {return Reflect.deleteProperty(target, prop)} })proxy.name tom 5.reactive对比ref 从定义数据角度对比 ref用来定义基本类型数据。reactive用来定义对象或数组类型数据。备注ref也可以用来定义对象或数组类型数据, 它内部会自动通过reactive转为代理对象。 从原理角度对比 ref通过Object.defineProperty()的get与set来实现响应式数据劫持。reactive通过使用Proxy来实现响应式数据劫持, 并通过Reflect操作源对象内部的数据。 从使用角度对比 ref定义的数据操作数据需要.value读取数据时模板中直接读取不需要.value。reactive定义的数据操作数据与读取数据均不需要.value。 6.setup的两个注意点 setup执行的时机 在beforeCreate之前执行一次this是undefined。 setup的参数 props值为对象包含组件外部传递过来且组件内部声明接收了的属性。context上下文对象 attrs: 值为对象包含组件外部传递过来但没有在props配置中声明的属性, 相当于 this.$attrs。slots: 收到的插槽内容, 相当于 this.$slots。emit: 分发自定义事件的函数, 相当于 this.$emit。 7.计算属性与监视 1.computed函数 与Vue2.x中computed配置功能一致写法 import {computed} from vuesetup(){...//计算属性——简写let fullName computed((){return person.firstName - person.lastName})//计算属性——完整let fullName computed({get(){return person.firstName - person.lastName},set(value){const nameArr value.split(-)person.firstName nameArr[0]person.lastName nameArr[1]}}) } 2.watch函数 与Vue2.x中watch配置功能一致两个小“坑” 监视reactive定义的响应式数据时oldValue无法正确获取、强制开启了深度监视deep配置失效。监视reactive定义的响应式数据中某个属性时deep配置有效。 //情况一监视ref定义的响应式数据 watch(sum,(newValue,oldValue){console.log(sum变化了,newValue,oldValue) },{immediate:true})//情况二监视多个ref定义的响应式数据 watch([sum,msg],(newValue,oldValue){console.log(sum或msg变化了,newValue,oldValue) }) /* 情况三监视reactive定义的响应式数据若watch监视的是reactive定义的响应式数据则无法正确获得oldValue若watch监视的是reactive定义的响应式数据则强制开启了深度监视 */ watch(person,(newValue,oldValue){console.log(person变化了,newValue,oldValue) },{immediate:true,deep:false}) //此处的deep配置不再奏效//情况四监视reactive定义的响应式数据中的某个属性 watch(()person.job,(newValue,oldValue){console.log(person的job变化了,newValue,oldValue) },{immediate:true,deep:true}) //情况五监视reactive定义的响应式数据中的某些属性 watch([()person.job,()person.name],(newValue,oldValue){console.log(person的job变化了,newValue,oldValue) },{immediate:true,deep:true})//特殊情况 watch(()person.job,(newValue,oldValue){console.log(person的job变化了,newValue,oldValue) },{deep:true}) //此处由于监视的是reactive素定义的对象中的某个属性所以deep配置有效 3.watchEffect函数 watch的套路是既要指明监视的属性也要指明监视的回调。watchEffect的套路是不用指明监视哪个属性监视的回调中用到哪个属性那就监视哪个属性。watchEffect有点像computed 但computed注重的计算出来的值回调函数的返回值所以必须要写返回值。而watchEffect更注重的是过程回调函数的函数体所以不用写返回值。 //watchEffect所指定的回调中用到的数据只要发生变化则直接重新执行回调。 watchEffect((){const x1 sum.valueconst x2 person.ageconsole.log(watchEffect配置的回调执行了) }) 8.生命周期 vue2.x的生命周期 vue3.0的生命周期 1 Vue3.0中可以继续使用Vue2.x中的生命周期钩子但有有两个被更名 beforeDestroy改名为 beforeUnmountdestroyed改名为 unmounted Vue3.0也提供了 Composition API 形式的生命周期钩子与Vue2.x中钩子对应关系如下 beforeCreatesetup()createdsetup()beforeMount onBeforeMountmountedonMountedbeforeUpdateonBeforeUpdateupdated onUpdatedbeforeUnmount onBeforeUnmountunmounted onUnmounted 9.自定义hook函数 什么是hook—— 本质是一个函数把setup函数中使用的Composition API进行了封装。类似于vue2.x中的mixin。自定义hook的优势: 复用代码, 让setup中的逻辑更清楚易懂。 10.toRef 作用创建一个 ref 对象其value值指向另一个对象中的某个属性。语法const name toRef(person,name)应用: 要将响应式对象中的某个属性单独提供给外部使用时。扩展toRefs 与toRef功能一致但可以批量创建多个 ref 对象语法toRefs(person) 三、其它 Composition API 1.shallowReactive 与 shallowRef shallowReactive只处理对象最外层属性的响应式浅响应式。shallowRef只处理基本数据类型的响应式, 不进行对象的响应式处理。什么时候使用? 如果有一个对象数据结构比较深, 但变化时只是外层属性变化 shallowReactive。如果有一个对象数据后续功能不会修改该对象中的属性而是生新的对象来替换 shallowRef。 2.readonly 与 shallowReadonly readonly: 让一个响应式数据变为只读的深只读。shallowReadonly让一个响应式数据变为只读的浅只读。应用场景: 不希望数据被修改时。 3.toRaw 与 markRaw toRaw 作用将一个由reactive生成的响应式对象转为普通对象。使用场景用于读取响应式对象对应的普通对象对这个普通对象的所有操作不会引起页面更新。 markRaw 作用标记一个对象使其永远不会再成为响应式对象。应用场景: 有些值不应被设置为响应式的例如复杂的第三方类库等。当渲染具有不可变数据源的大列表时跳过响应式转换可以提高性能。 4.customRef 作用创建一个自定义的 ref并对其依赖项跟踪和更新触发进行显式控制。实现防抖效果 templateinput typetext v-modelkeywordh3{{keyword}}/h3/templatescriptimport {ref,customRef} from vueexport default {name:Demo,setup(){// let keyword ref(hello) //使用Vue准备好的内置ref//自定义一个myReffunction myRef(value,delay){let timer//通过customRef去实现自定义return customRef((track,trigger){return{get(){track() //告诉Vue这个value值是需要被“追踪”的return value},set(newValue){clearTimeout(timer)timer setTimeout((){value newValuetrigger() //告诉Vue去更新界面},delay)}}})}let keyword myRef(hello,500) //使用程序员自定义的refreturn {keyword}} }/script 5.provide 与 inject 作用实现祖与后代组件间通信套路父组件有一个 provide 选项来提供数据后代组件有一个 inject 选项来开始使用这些数据具体写法 祖组件中后代组件中 setup(){......let car reactive({name:奔驰,price:40万})provide(car,car)...... }setup(props,context){......const car inject(car)return {car}...... } 6.响应式数据的判断 isRef: 检查一个值是否为一个 ref 对象isReactive: 检查一个对象是否是由 reactive 创建的响应式代理isReadonly: 检查一个对象是否是由 readonly 创建的只读代理isProxy: 检查一个对象是否是由 reactive 或者 readonly 方法创建的代理 四、Composition API 的优势 1.Options API 存在的问题 使用传统OptionsAPI中新增或者修改一个需求就需要分别在datamethodscomputed里修改 。 2.Composition API 的优势 我们可以更加优雅的组织我们的代码函数。让相关功能的代码更加有序的组织在一起。 五、新的组件 1.Fragment 在Vue2中: 组件必须有一个根标签在Vue3中: 组件可以没有根标签, 内部会将多个标签包含在一个Fragment虚拟元素中好处: 减少标签层级, 减小内存占用 2.Teleport 什么是Teleport—— Teleport 是一种能够将我们的组件html结构移动到指定位置的技术。 teleport to移动位置div v-ifisShow classmaskdiv classdialogh3我是一个弹窗/h3button clickisShow false关闭弹窗/button/div/div /teleport 3.Suspense 等待异步组件时渲染一些额外内容让应用有更好的用户体验使用步骤 异步引入组件 import {defineAsyncComponent} from vue const Child defineAsyncComponent(()import(./components/Child.vue)) 使用Suspense包裹组件并配置好default 与 fallback templatediv classapph3我是App组件/h3Suspensetemplate v-slot:defaultChild//templatetemplate v-slot:fallbackh3加载中...../h3/template/Suspense/div /template 六、其他 1.全局API的转移 Vue 2.x 有许多全局 API 和配置。 例如注册全局组件、注册全局指令等。 Vue3.0中对这些API做出了调整 将全局的API即Vue.xxx调整到应用实例app上 2.x 全局 APIVue 3.x 实例 API (app) Vue.config.xxxx app.config.xxxx Vue.config.productionTip 移除 Vue.component app.component Vue.directive app.directive Vue.mixin app.mixin Vue.use app.use Vue.prototype app.config.globalProperties //注册全局组件 Vue.component(MyButton, {data: () ({count: 0}),template: button clickcountClicked {{ count }} times./button })//注册全局指令 Vue.directive(focus, {inserted: el el.focus() } 2.其他改变 data选项应始终被声明为一个函数。过度类名的更改 Vue2.x写法Vue3.x写法 移除keyCode作为 v-on 的修饰符同时也不再支持config.keyCodes移除v-on.native修饰符 父组件中绑定事件子组件中声明自定义事件 移除过滤器filter过滤器虽然这看起来很方便但它需要一个自定义语法打破大括号内表达式是 “只是 JavaScript” 的假设这不仅有学习成本而且有实现成本建议用方法调用或计算属性去替换过滤器。...... .v-enter, .v-leave-to {opacity: 0; } .v-leave, .v-enter-to {opacity: 1; }.v-enter-from, .v-leave-to {opacity: 0; }.v-leave-from, .v-enter-to {opacity: 1; }my-componentv-on:closehandleComponentEventv-on:clickhandleNativeClickEvent /scriptexport default {emits: [close]} /script
http://www.sczhlp.com/news/158311/

相关文章:

  • seo综合查询网站万能浏览器网页版
  • 帝国cms怎么做网站wordpress文章支付可见
  • 起名算命网站如何做赚钱资阳市建设局网站
  • 长沙网站优化步骤好听的公司名字大全
  • 作风建设年网站电白区住房和城乡建设部门户网站
  • 网站建设如何商谈自己做键盘的网站
  • 成都 网站建设公司老干部局网站建设
  • 定时任务详解
  • teset3
  • Java并发编程(5)
  • led设计网站建设新闻 今天
  • 旅游网站建设价格交易平台网站制作
  • 如何查到网站建设学建模去什么学校
  • 企业的建站方式南宁seo服务公司
  • 北京企业网站设计制作沐风 wordpress
  • 光谷做网站广西网络广播电视台
  • 建设一站式服务网站给人做网站能赚钱吗
  • 湖南建设部网站漫画网站怎么做
  • 沧州网站建设cms网站代理
  • 做内部优惠券网站赚钱吗企业品牌网站建设费用
  • 网站建设宣传页湖南智能网站建设费用
  • 网站建设与管理ppt课件百度云盘开发微信小程序的工具
  • 丰台区网站建设网页 转发到wordpress
  • 外贸公司网站设计哪家好网站制作流程视频教程
  • 郑州做网站好网站需要做实名认证如何做
  • 成都网站建设天府软件园建站行业转型
  • 怎么做套板网站怎么免费做网站视频教学
  • 英文外贸网站 php源码化妆品的网站布局设计图片大全
  • 个人网站可以做什么做网站和c 哪个好
  • 网络平台怎么弄天津网站优化指导