之前学习的时候用过vue3,过了过文档,现在公司的新项目就是vue3写的,开写了几天了,写起来挺不错的。
想吐槽一下vite,有点太智能了吧,只要在js里用到一些vue的方法,连引入都省去了,看过打包后的js,里面给你自动加上了引入,看代码时给我一种错觉,还以为是放在window上的呢,再配合script setup 的写法,方便是太方便了,方便过头了,什么函数式写法的语法糖, 看起来以为是个函数,其实就是打包后给你替换了一下,最开始写的时候还有点误导性,我反正是太不推荐用这个了,还是该引入的引入,正儿八经的写法好一些。
各有各的爱好吧,我反正是太不推荐了,更加配置化编程的感觉了。
写了几天还是学到了一些东西,当时写 storagex-js 工具的时候,使用proxy深度代理深层次的对象,使用了很蠢的方法,递归把每个对象都变成代理对象(这样源对象已经改变了,而且对象层次太深性能不好),来实现对象改变后相应的去更新本地数据,代理对象之间的赋值这些加了很多优化,总体来说管你怎么赋值都能相应更新到本地,看了vue3的处理方法就太科学了,不管层次多深的对象都只代理一层,当访问的一个属性的值是个对象的时候再去代理该对象并返回该对象(已经代理过的对象不会再代理),这样不仅性能好,而且查看源对象的时候结构一点都没有破坏,用到那一层就代理到那一层,这样的处理很科学。对于基础数据的话就包装一层来代理,这样只要数据一变化就能监听到。使用Api的形式来代理,这样我不管在那个文件都能生成一个可用于组件中的数据了。
使用 onMounted() 来注册生命周期钩子时很疑惑只使用一个参数的时候它是怎么注册到当前实例上的,但考虑到调用setup后再去render,有其他组件再去调用其他组件的setup后render,生成实例的时候是有先后顺序的,这样就很容易取到实例,用caller来找的话能不能行呢?我在定时器里注册的钩子能否触发呢?源码又看不进去,哈哈!
还没有用TS来写正式的项目,现在已经很香了,很期待。