范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Vue3组件开发(一)搭建表格编辑系统环境搭建

  Vue 是一套用于构建用户界面的渐进式框架,与其它大型 JS 框架不同,Vue 被设计为可以自底向上逐层应用,更易上手,还便于与第三方库或既有项目整合,因此,Vue 完全能够为复杂的单页应用提供驱动。
  2020年09月18日,Vue.js 3.0 正式发布,作者尤雨溪将其描述为:更快、更小、更易于维护。Vue 3都加入了哪些新功能?
  本次发布, Vue 框架本身迎来了多项更新,如 Vue 此前的反应系统是使用 Object.defineProperty 的 getter 和 setter。 但是,在 Vue 3中,将使用 ES2015 Proxy 作为其观察者机制,这样做的好处是消除了以前存在的警告,使速度加倍,并节省了一半的内存开销。
  除了基于 Proxy 的观察者机制,Vue 3的其他新特性还包括:
  1. Performance(性能提升)
  在Vue 2中,当某个DOM需要更新时,需要遍历整个虚拟DOM树才能判断更新点。而在Vue 3中,无需此项操作,仅需通过静态标记,对比虚拟节点上带有patch flag的节点,即可定位更新位置。
  对比Vue 2和Vue 3的性能差异,官方文档中给出了具体数据说明:SSR速度提高了2~3倍Update性能提高1.3~2倍
  2. Composition API(组合API)
  Vue 2中有data、methods、mounted等存储数据和方法的对象,我们对此应该不陌生了。比如说要实现一个轮播图的功能,首先需要在 data 里定义与此功能相关的数据,在 methods 里定义该功能的方法,在mounted里定义进入页面自动开启轮播的代码…… 有一个显而易见的问题,就是同一个功能的代码却要分散在页面的不同地方,维护起来会相当麻烦。
  为了解决上述问题,Vue 3推出了具备清晰的代码结构,并可消除重复逻辑的 Composition API,以及两个全新的函数setup和ref。
  Setup 函数可将属性和方法返回到模板,在组件初始化的时候执行,其效果类似于Vue 2中的beforeCreate 和 created。如果想使用setup里的数据,需要将值return出来,没有从setup函数返回的内容在模板中不可用。
  Ref函数的作用是创建一个引用值,主要是对String、Number、Boolean的数据响应做引用。
  相对于Vue 2,Vue 3的生命周期函数也发生了变更,如下所示:beforeCreate -> 请使用 setup()created -> 请使用 setup()beforeMount -> onBeforeMountmounted -> onMountedbeforeUpdate -> onBeforeUpdateupdated -> onUpdatedbeforeDestroy -> onBeforeUnmountdestroyed -> onUnmountederrorCaptured -> onErrorCaptured
  需要注意的是,Vue 2使用生命周期函数时是直接在页面中写入生命周期函数,而在Vue 3则直接引用即可:import {reactive, ref, onMounted} from "vue"
  3. Tree shaking support(按需打包模块)
  有人将"Tree shaking" 称之为"摇树优化",其实就是把无用的模块进行"剪枝",剪去没有用到的API,因此"Tree shaking"之后,打包的体积将大幅度减少。
  官方将Vue 2和Vue 3进行了对比,Vue 2若只写了Hello World,且没有用到任何的模块API,打包后的大小约为32kb,而Vue 3 打包后仅有13.5kb。
  4. 全新的脚手架工具:Vite
  Vite 是一个由原生 ESM 驱动的 Web 开发构建工具。在开发环境下基于浏览器原生 ES imports 开发,在生产环境下基于 Rollup 打包。
  和 Webpack相比,具有以下特点:快速的冷启动,不需要等待打包即时的热模块更新真正的按需编译,不用等待整个项目编译完成
  由于完全跳过了打包这个概念,Vite的出现大大的撼动了Webpack的地位,且真正做到了服务器随起随用。看来,连尤大神都难逃"真香"理论。
  Vite究竟有什么魔力?不妨让我们通过实际搭建一款基于Vue 3 组件的表格编辑系统,亲自体验一把。环境搭建
  使用 Vite 初始化一个 Vue 3 项目
  1. 执行代码:$ npm init vite-app  $ cd   //进入项目目录 $ npm install  //安装项目所需依赖 $ npm run dev  //启动项目
  我们来看下生成的代码, 因为 vite 会尽可能多地镜像 vue-cli 中的默认配置, 所以,这段代码看上去和 vue-cli 生成的代码没有太大区别。├── index.html
  ├── package.json
  ├── public
  │ └── favicon.ico
  └── src
  ├── App.vue
  ├── assets
  │ └── logo.png
  ├── components
  │ └── HelloWorld.vue
  ├── index.css
  └── main.js
  2. 执行下列命令:
  此时如果不通过 npm run dev 来启动项目,而是直接通过浏览器打开 index.html, 会看到下面的报错:
  报错的原因:浏览器的 ES module 是通过 http 请求拿到模块的,所以 vite 的一个任务就是启动一个 web server 去代理这些模块,在 vite 里是借用了 koa 来启动的服务。export   function  createServer(config :  ServerConfig) :  Server {
  // ...
  const  app  =   new  Koa < State, Context > ()
  const  server  =  resolveServer(config, app.callback())
  // ...
  const  listen  =  server.listen.bind(server)
  server.listen  =  (async (...args :  any[]) => {
  if  (optimizeDeps.auto  !==   false ) {
  await require( "../optimizer"  ).optimizeDeps(config)
  }
  return  listen(...args)
  }) as any
  return  server
  }
  由于浏览器中的 ESM 是获取不到导入的模块内容的,需要借助Webpack 等工具,如果我们没有引用相对路径的模块,而是引用 node_modules,并直接 import xxx from "xxx",浏览器便无法得知你项目里有 node_modules,只能通过相对路径或者绝对路径去寻找模块。
  这便是vite 的实现核心:拦截浏览器对模块的请求并返回处理后的结果(关于vite 的实现机制,文末会深入讲解)。
  3. 生成项目结构:
  入口 index.html 和 main.js 代码结构为:              Vite App             // main.js // 只是引用的是最新的 vue3 语法,其余相同 import { createApp } from "vue" import App from "./App.vue" import "./index.css"   createApp(App).mount("#app")
  4. 进入项目目录:cd myVue3
  5. 安装相关模块:npm install
  6. 下载模块:
  7. 启动项目:npm run dev
  8. 进入地址,当我们看到这个页面时,说明项目已经成功启动了。
  Vite 的实现机制
  1. /@module/ 前缀
  对比工程下的 main.js 和开发环境下实际加载的 main.js,可以发现代码发生了变化。
  工程下的 main.js:import { createApp } from "vue" import App from "./App.vue" import "./index.css"   createApp(App).mount("#app")
  实际加载的 main.js:import { createApp } from "/@modules/vue.js" import App from "/src/App.vue" import "/src/index.css?import"   createApp(App).mount("#app")
  为了解决 import xxx from "xxx" 报错的问题,vite 对这种资源路径做了统一处理,即添加一个/@module/前缀。
  在 src/node/server/serverPluginModuleRewrite.ts 源码的 koa 中间件里可以看到 vite 对 import 做了一层处理,其过程如下:在 koa 中间件里获取请求 body通过 es-module-lexer 解析资源 ast 拿到 import 的内容判断 import 的资源是否是绝对路径,绝对视为 npm 模块返回处理后的资源路径:"vue" => "/@modules/vue"
  2. 支持 /@module/
  在 /src/node/server/serverPluginModuleResolve.ts 里可以看到大概的处理逻辑:在 koa 中间件里获取请求 body判断路径是否以 /@module/ 开头,如果是取出包名去node_module里找到这个库,基于 package.json 返回对应的内容
  3. 文件编译
  通过前文,我们知道了 js module 的处理过程,对于vue、css、ts等文件,其又是如何处理的呢?
  以 vue 文件为例,在 webpack 里使用 vue-loader 对单文件组件进行编译,在这里 vite 同样拦截了对模块的请求并执行了一个实时编译。
  通过工程下的 App.vue 和实际加载的 App.vue,便发现改变。
  工程下的 App.vue:    
  实际加载的 App.vue:import HelloWorld from "/src/components/HelloWorld.vue";   const __script = {     name: "App",     components: {         HelloWorld,     }, };   import "/src/App.vue?type=style&index=0&t=1592811240845" import {render as __render} from "/src/App.vue?type=template&t=1592811240845" __script.render = __render __script.__hmrId = "/src/App.vue" __script.__file = "/Users/wang/qdcares/test/vite-demo/src/App.vue" export default __script
  可见,一个 .vue 文件被拆成了三个请求(分别对应 script、style 和template) ,浏览器会先收到包含 script 逻辑的 App.vue 的响应,然后解析到 template 和 style 的路径后,再次发起 HTTP 请求来请求对应的资源,此时 Vite 对其拦截并再次处理后返回相应的内容。// App.vue?type=style import { updateStyle } from "/vite/hmr" const css = " #app {   font-family: Avenir, Helvetica, Arial, sans-serif;   -webkit-font-smoothing: antialiased;   -moz-osx-font-smoothing: grayscale;   text-align: center;   color: #2c3e50;   margin-top: 60px; } " updateStyle("7ac74a55-0", css) export default css   // App.vue?type=template import {createVNode as _createVNode, resolveComponent as _resolveComponent, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock} from "/@modules/vue.js"   const _hoisted_1 = /*#__PURE__*/ _createVNode("img", {     alt: "Vue logo",     src: "/src/assets/logo.png" }, null, -1 /* HOISTED */ )   export function render(_ctx, _cache) {     const _component_HelloWorld = _resolveComponent("HelloWorld")       return (_openBlock(),     _createBlock(_Fragment, null, [_hoisted_1, _createVNode(_component_HelloWorld, {         msg: "Hello Vue 3.0 + Vite"     })], 64 /* STABLE_FRAGMENT */     )) }
  vite对于其他的类型文件的处理几乎都是类似的逻辑,即根据请求的不同文件类型,做出不同的编译处理结果。
  欢迎点击下方"了解更多"获取更多技术详情。

GalaxyA525G提前曝光光充电器IP67对于属于中端市场的手机,GalaxyA52在正式发布之前已经引起了巨大轰动。这款手机最近引起了很多关注,而最新的曝光使GalaxyA525G出现了前所未有的信息。今天早些时候,将尚GalaxyS10OneUI3。0更新推送已恢复三星几周前开始推出稳定版GalaxyS10OneUI3。0更新。不过,三星在上周取消了更新推送。虽然没有提供任何关于为什么这样做的说明,但更新推送还是被停止了。多个用户报告了更新的GalaxyTabS6Lite更新Android11GalaxyTabS6Lite现在开始接受其首次主要操作系统升级,更新版本号为P615XXU4CUBB,更新时间至少提前两个月。因此,三星的中档平板电脑在正式发布十个月后便开始向A全新GalaxyM625G将普及5G换皮A525GGalaxyA系列手机是三星首款获得5G支持的非旗舰产品。三星一直致力于使5G覆盖全球更多客户,这意味着必须大大降低进入门槛。三星可以通过在其中档和低端设备中增加5G支持来做到这一三星为最廉价的GalaxyA01推送2021年2月安全更新在GalaxyA01的固件更新已经过去了大约三个月后,三星又把注意力转回这款不起眼的廉价手机,并推送了一个新的安全补丁。三星目前正在推送GalaxyA01(SMA015F)的202宝马X325i怎么样?动力够用吗?简评25iM运动套装版宝马X3的外观无需多说,宝马经典的双肾格栅勺子型LED日行灯充满力量感的车身线条,无不在彰显着宝马家族独特的运动气质,而且最低配车型也直接提供M运动套件,并且无需加价,这一点值得称进阶的家族脸,新款长安CS35PLUS上市,配全新蓝鲸动力长安汽车从微面起家,靠合资品牌发展,最后靠自主研发而壮大,目前已经成为一线国产汽车品牌,而旗下的SUV车型应该算是头功。CS35是长安推出的首款SUV车型,而且首战告捷,奠定了长安牛犇版到底牛不牛?简析奔腾T55,10。49万起售虽说有一汽集团的强大背景和资金支持,但奔腾在国内自主品牌中的存在感很低,还有人说它是廉价版红旗,其实奔腾在一汽的众多品牌中,也确实有点爹不疼娘不爱的意思。日前,奔腾全新紧凑型SUV拒绝双离合,长安CS75PLUS超越哈弗H6成2月份销冠近日,车联会公布了2月份国内汽车市场销量数据,可以说说是几家欢喜几家愁,首先就是大众朗逸超越日产轩逸,成为轿车市场的新销冠,其次就是长安CS75PLUS这个万年老二成功超越哈弗H6追光吧20212020年,国家提出新基建,旨在吸收新科技革命成果建立现代化经济体系基础设施。云徙作为国内首家数字化转型践行者,为消费品地产汽车等行业100客户成功赋能了数字化转型与商业创新。身体云徙科技CEO包志刚受邀参加大国消费战略营销创新论坛4月25日,由上海市中小企业发展服务中心上海交通大学海外教育学院联合主办的大国消费战略营销创新论坛暨交大CEOCMO校友春季论坛在上海银星皇冠假日酒店隆重举行!上海市中小企业发展服
库克良心了,iPhoneSE3至少有4个惊喜,果粉幸福来得太突然据外媒letsgodigital爆料,苹果将于3月8日举行春季新品发布会,届时将会发布万众期待的第三代iPhoneSE新机(也称iPhoneSE3)。据悉,新款iPhoneSE3将开学季专属优惠来了!用华为笔记本平板开启新学期吧随着春天的脚步近了,崭新的学期也在悄然到来。在开学季即将来临之际,不少学子也开始准备起了在学校中所必不可少的高科技装备。对于大部分的大学生而言,如何高效地听课向来是个难题,虽然不少见过大海吗?那就发几张大海的美景照片吧,让大家欣赏欣赏?居住在有海的城市,一年也顶多到海边二三次,避开暑假旺季,都是淡季去玩,人少又安静,可以坐在岩石上,静静的听海浪冲刷拍打岩石的声音,慢慢的欣赏大海的美!这是冬天拍的连云港的海,美不美DDR5内存怎么选?频率下差异大吗?通过测试告诉你随着Intel第12代酷睿处理器的发布,DDR5和PCIe5。0的加持让Intel有了更多战未来的可能。相较于DDR4内存,DDR5内存在频率上直接起飞,默认频率也来到了4800M做ACDC电源时,你们都使用的什么芯片?使用多少频率控制?做ACDC电源时,你们都使用的什么芯片?使用多少频率控制?不通则已,一通则通。现如今的ACDC电源管理芯片种类繁多,要全部搞懂这些电源管理芯片,可以成为高级电子工程师了。前两年的悟NFT市场蓬勃发展,关键在于这五因素NFT是骗局还是值得参与的大事件?它是会像mRNA疫苗那样的突破,还是会像ICO一样腐烂?NFT市场究竟会取代传统市场,还是会像泡沫一样破灭?没有人能给出准确的答案。但我们现在可以李录169亿持仓曝光!清仓拼多多,加仓美国银行和Meta,重仓邮储银行大賺20亿北京时间2月16日,芒格衣钵传人李录旗下的喜马拉雅资本向美国SEC提交了其美股最新持仓情况!截至2021年末,喜马拉雅资本的总持仓规模为26。65亿美元(约合169亿人民币),较三每日晨读智能汽车晨读自动驾驶汽车。Day21什么是自动驾驶汽车?自动驾驶汽车是无人驾驶汽车,不需要人工操作自己可以走的车2自动驾驶汽车有什么特点?只要开启自动驾驶系统就可以走了,因为装有人工智能芯菠萝手机拳打三星脚踢苹果,能跟外星人视频?网友华为也要靠边随着iPhone14规格价格和发布日期等信息曝光,越来越多人加入到苹果新机相关话题讨论中。意外的是,在这些讨论中,出现了一些异常奇葩的声音。就在大家纷纷猜测iPhone14是升级4厉害了,安卓13中可用虚拟机运行Windows11,大神演示玩DOOM现在提起虚拟机安卓模拟器相信大家都已经很熟悉了,但是,大家平时接触的比较多的一般都是在Windows系统内通过虚拟机运行安卓模拟器,在Windows系统中实现对安卓系统的仿真。有没腾讯大手笔!用虚幻引擎升级QQ,竟是为QQ元宇宙开路?近年来不少数据统计显示,刚刚度过23周岁生日的QQ,移动端月活跃用户正在不断下滑,微信突破12亿用户的同时,QQ却已经跌破6亿用户了,虽然横向对比其他社交产品依旧牛逼,但对于它本身