低代码平台实现中遇到的问题收集(三) | 青训营笔记

110 阅读2分钟

这是我参与「第四届青训营」笔记创作活动的的第8天。

这是我参与「第四届青训营」笔记创作活动的的第8天。在实现低代码平台的过程中,我遇到了许多问题,在此分为三篇进行总结。本篇主要记录一些有用的方法和莫名其妙的报错,技术栈是Vue3 + Vite3.0 + TypeScript。

JavaScript:怎么判断NaN?

判断NaN不能用==、!==这些,而是要isNaN():

if (isNaN(someObject.someValue)) ...

或者更现代的Number.isNaN

if (Number.isNaN(someObject.someValue)) ...

Anything that is not NaN returns false. Strings, nullundefined, booleans - they'll all return false from Number.isNaN() or plain isNaN(). The function does not test if something "isn't a number", but rather if it "is NaN" which is a specific invalid number value, in practice. To test if something is not a number, do typeof something !== "number" || isNaN(something)

详见链接

Vue:TransitionGroup

列表过度、进入离开过渡、状态过度,都是非常常用的动画过度,Vue已经内置这三种动画,而且很不错。

详细可见链接

lowcode.gif

TypeScript:e.target.dataset报错

这次还是在这位大神的blog下找到了相关信息:Borislav Hadzhiev

当然了这个是直接的答案:链接

Why Does the EventTarget Type Not Inherit From Element Type? The reason this is the case is simply because all event targets might not be HTML elements. For example the event target can be also be XMLHttpRequestFileReaderAudioNodeAudioContext, etc.

一个是声明为HtmlDivElement、Element(看具体情况,我感觉细一点好),一个是给函数参数断言一下类型(as)

2.png

Vue3:数组响应式问题 - reactive定义的数组无反应

答案参考链接:vue3使用reactive包裹数组如何正确赋值

想起来了,数组不能直接reactive,至少外面得包一层对象,要么就用ref,不过要加个value。一个加个属性,一个加value,两个方案半斤八两,直接ref算了

后来又测试过,无论如何Vue都监测不到push、splice对数组的改变,只有直接赋值“=”改变指针了才会响应布局。

Vite3:vite build失败/Rollup失败

3.png

答案:Vite3需要Node 14.18+/16+,用nvm换了16.16.0之后好了

  • 记得开管理员模式的cmd

4.png

至于后面那个,Rollup,其实既不是vue的问题也不是vite的问题,而是img标签的src属性有错:

5.png 去掉src即可

6.png

TypeScript:Cannot use import statement outside a module

7.png 这是因为script没写上type=”module”,而index.html引入的是模块化的ts文件

8.png

Vue3:”Order Matters” - #app挂载失败

9.png 原因在于标签顺序,要把script放在body后面 10.png 跟顺序没关系,可能是Vue修复这个bug了。

原因是没写id为app的div标签,这下知道“#app”是什么意思了吧,是选择器。

11.png

刚刚试过,script甚至丢到body前面去都是没问题的。

Vite:resolve一个.umd.js,里面有process,但是报process is not defined

国内找到了一个答案:CSDN

当然了,也是参考Github Issues的。

另外,可见onLoad函数是读取完成,resolve是解析完成,其顺序如下:

12.png

13.png