当前位置: 首页 > Web前端 > vue.js

Vue3知识点及构建开发中遇到的错误

时间:2023-03-31 20:52:24 vue.js

this.$refs和ref(null)Compute和watch区别及应用场景computed属性中的属性不需要在data中定义,必须有returncomputed具有缓存特性的属性,会根据它们的依赖关系进行缓存,只有当相关的依赖关系发生变化时才会重新计算;当一个变量值受到多个变量值的影响时,应该使用它。watch中的值需要在data中定义。监听函数有参数,newval与oldvalwatch的依赖是单一的,一次只能监听一个变量;当一个变量值影响多个变量值时,应使用v-slot槽。v-slot槽是子组件中定义的预定义槽,为了预留一个地方,以便在父组件中使用子组件标签时,将html代码写入子组件中,有一个name属性叫做namedslot,没有name属性是默认插槽。slot有作用域,父组件模板v-slot:slotName='{sonValName1,sonValName2}'params和query参数使用和不同的是在使用namenavigation的时候,params和query可以同时使用【网上还有其他说法】query相当于一个get请求。页面跳转时,可以看到请求参数params相当于地址栏中的post请求,参数不会出现在地址栏中。在线显示name与params配对,path与query配对。当我测试时,名称可以与参数和查询一起使用以使用命令v-forv-showv-ifv-else-ifv-elsev-htmlv-textv-bindv-onv-modelv-slotkeep-alive缓存移除的组件实例,tab切换会导致组件破坏和数据删除,如果想保留,可以用标签包裹起来;includesexcludes可以限制orkeep组件实例Vue常用的修饰符及其使用形式修饰符lazy,trim,数字事件修饰符stop,prevent,self,once,passive,native,capturemousebuttonmodifierleftleftclick,rightrightclick,middle中键点击键盘修饰符onkeyup,onkeydown,后跟键码代号或者键码v-show和v-if的区别,两个v-show的优先级通过修改来控制显示或者隐藏元素CSS的显示属性;v-if指令直接销毁和重建DOM来显示和隐藏元素;使用v-show会节省性能;只需要显示或隐藏一次。使用v-if更合理。v-ifpriorityishigherthanv-for的原理和作用关键是每个vnode的唯一id。根据key可以更准确快速的找到对应的vnode节点,然后进行更新渲染。$nextTick的原理和nextTick指定的回调函数会在浏览器更新完DOM后执行。什么是vuex??如何使用?哪些功能场景使用它?vue框架中的状态管理,在单页应用中,组件之间的状态,音乐播放,登录状态,加入购物车等属性:State,Getters、Mutations、Actions和Modulestates是存储数据源的地方。存储的数据是响应式的。Getters可以计算和过滤State。突变类似于事件。动作类似于突变。动作提交突变而不是直接改变状态变化。数据,可以异步操作vue路由的钩子函数。全局导航钩子、组件钩子、个别路由独占路由钩子功能总结有6个全局前置钩子router.beforeEach((to,from,next)=>{})即将进入的目标路由,当前导航即将离开,next()函数必须调用该方法解析该钩子完成跳转并做页面跳转前的处理,页面登录判断,管理员权限判断next-yes可选参数,若返回false则取消navigation,next/return({name:'Login'})导航到loginglobalpost-hookafterEach没有next方法改变页面标题路由独有的钩子函数:beforeEnter((to,from)=>{})router>index.js只在进入路由时触发,不会在paramsqueryhash变化时触发组件中的路由钩子函数:beforeRouteEnter,beforeRouteLeave,beforeRouteUpdate1、清除组件中的定时器2、当页面还没有时窗口关闭或内容不保存,防止页面跳转3.保存的内容与VuexVue组件之间的参数传递1.父组件传递给子组件:子组件通过props方法接受数据;2.子组件传给父Component:$emit方法传参3.provideinject实现父组件传值给深子组件无响应数据4.使用Vuex5。路由route.query6.this.$parentthis.$root6。非父子组件之间的数据传递,兄弟组件传值借用eventBus,创建一个事件中心,可以用它来传递事件和接收事件使用$emit方法发送数据,使用$on接收在vue项目中创建一个文件eventBus.js,导入vue和newVue实例并exportimportVuefrom'vue'exportdefaultnewVue()导入eventBus。使用时在js文件中在当前组件中:importeventBusfrom"@/util/eventBus.js"eventBus.$emit("eventname","passedparameters")在另一个需要挂载的组件中也importeventBuseventBus.$on("事件名称",(代理参数)=>{然后我们做相应的操作})vue中MVVM的理解M模型(Model):数据模型;负责数据存储V视图View负责页面展示,由HTML和CSS组成来构建一个VM视图模型(View-Model),负责业务逻辑处理(如Ajax请求等)Vue实现了两个原则——databinding的方式Vue3通过ES6Proxy类实现数据响应,直接动态添加新的属性仍然可以实现数据响应,Proxy支持的拦截操作有13种[get,set,has,ownKeys]Vue2监听set和get的每个属性通过Object.defineProperty(),当数据变化时触发相应的监听回调,执行Compile解析模板命令,将模板中的变量替换为数据,渲染视图;缺点:数组不可更改,Vue2相当于重写了数组的原型,劫持pushpopshiftunshiftsplicesortreverse(这只是一部分,理解不完整)data里面的数据不要要有反应,那怎么办?把它放在返回之外。Object.freeze()Vue的路由实现:hash模式和history模式Hash模式:在浏览器中,符号“#”、#和#后面的字符称为Hash,读作window.location.hash;history模式:history模式下,前端url必须和实际向后端发起请求的url一致,后端需要配合vue生命周期beforeCreate在组件实例初始化完成created后立即调用在组件实例处理完所有与状态相关的选项、响应数据、计算属性、方法和侦听器之后调用eMount在组件被挂载之前调用,在创建DOM节点之前mounted在组件被挂载并且所有同步子组件都被挂载之后被调用Unmounted在组件由于响应状态更改而更新其DOM树后调用。Activated在卸载组件实例后调用。如果组件实例是缓存树的一部分,则在将组件插入DOM时调用deactivated。如果组件实例是缓存树的一部分,当组件从DOM中移除时,调用Vue实例从创建到销毁的过程就是从创建开始、初始化数据、编译模板、Dom的挂载→渲染、更新→渲染、销毁整个过程就是Vue的生命周期。SSRServer-SideRendering表示服务端渲染。服务器端完成页面HTML结构拼接的页面处理技术,发送给浏览器,再给它绑定状态和事件,成为一个完全交互的页面。搜索引擎优先抓取页面的HTML结构,在使用ssr时,服务器已经生成了业务关联的HTML,有利于seo首屏的渲染:用户无需等待所有js就可以看到页面视图加载到页面上。项目的高度复杂性需要图书馆的支持。代码兼容性服务器负载变大。与前后端分离服务器只需要提供静态资源相比,服务器负载更大。mixin的作用类似于vuex和公共组件。可以使用Mixins,它可以包含任何组件选项(数据、创建、安装、方法、过滤器等)。引入组件后,相关选项会被合并,相当于引入后扩展了父组件的属性。引入mixins时,componentDuplicatedefinitioninminxins,minxins中的property方法会被覆盖Vue3推荐stepcombinedAPIaxios发送多个请求(并发请求),类似promise.all,如果一个请求失败,则请求停止PromiseAPI在浏览器中创建XMLHttpRequest请求在node.js中发送http请求cancelrequestconstcontroller=newAbortController();controller.abort()自动转换JSON数据客户端支持防止CSRF/XSRF(跨域请求伪造)拦截请求和响应转换请求和响应数据npmERR!代码ERESOLVEnpm错误!ERESOLVEcouldnotresolve可能npm有问题,依赖包之间可能有冲突。将--legacy-peer-deps添加到命令行提示符