集体踩坑 vue3+pinia 1个月后整体评分:
vue3
上手容易 ★★★★☆ 写过react的上手更容易
开发敌对 ★★★★☆ 局部插件版本独自管制
pinia
上手容易 ★★★★★ 写过vuex的上手更容易
开发敌对 ★★★★★ 类型申明敌对
以下记录体验新玩具的一些应用感触与一些开发中遇到的坑。
感触
- 之前始终习惯vue class style component,当初换成
defineComponent
更相似于react function component.整体开发上没有受影响 - pinia在 组件setup生命周期里useStore()创立间接应用,包含vue-router也用useRouter的形式,整体上手复杂度和Vuex的import大同小异。
- 在类型申明上pinia更具劣势,可能在vue组件tsx中取得很好的类型申明提醒,前提是在pinia store中都要手动标注。特地是action的返回类型。
- pinia store的申明比vuex缩小了mutation的模型局部。在store建数据模型时能够更正当的形象业务模型,也防止了action-mutation能力批改state的麻烦。当然这样也有害处,原我的项目中简单的mutation相当于要独自抽离成filter之类的概念,但这种filter也不会很多,间接批改state还是比拟不便的,除非前后端的数据转换特地多。
- 当把 attrs,slots,emit 写成setup生命周期入参时,好像又回到了angular scope依赖注入的感觉,对开发影响不大,只是每个文件多了一行而已,写法从this.$xxx改成间接写emit之类的反而更简短。
- 如果是复制模板文件很容易遗记改defineComponent里的name参数,也就是组件名称。对业务不影响但在vue-devtool里会显示成雷同的组件名称,不容易排查。
遇到的坑
对 vue-svg-loader 锁版本
- 应用
"vue-svg-loader": "0.17.0-beta.2"
配置 vue.config.js如下:
chainWebpack: (config) => {// vue-svg-loaderconst svgRule = config.module.rule("svg");svgRule.uses.clear();svgRule.delete("type");svgRule.delete("generator");svgRule.use("vue-loader").loader("vue-loader").end().use("vue-svg-loader").loader("vue-svg-loader");},
- 应用
对pinia 锁版本
- 应用
"pinia": "^2.0.0-rc.0"
- 应用
vue3 和目前的浏览器插件devtool 有抵触,
- 须要下载beta版的vue-devtool (
BUGFIX Vue.js devtools 5.0.0 beta 3 fix
) 如果嫌2个vue devtool切换不不便,能够自行装置
vue-devtool
,并配置到html模板;例如:<% if (process.env.NODE_ENV==='development') { %> <script src="http://localhost:8098"></script> <% } %>
- 须要下载beta版的vue-devtool (
vue router 新写法匹配其余路由
{ path: "/:pathMatch(.*)*", name: "NotFound", component: NotFoundPage, },
css module反对:
配置vue.config.js
css: {requireModuleExtension: true,loaderOptions: {css: { modules: { localIdentName: NODE_ENV === "development" ? "[path]-[local]" : "[local]-[hash:4]", },},}, },