纯粹的 html、js、css 构建网站的传统做法已经被 template/jsx 替代了,jQuery 时代的做法已经不适合使用了,虽然现在 jQuery 现存市场还很大(from):
不过新项目的采用 jQuery 已经很少了(from):
Vue 和 React 最大的区别就是 template/jsx,proxy/immutable。
template/jsx 本质上都是语法糖,template 的语法糖是 v-if
、v-for
这些,而且 Vue 中文文档写的好,对于新手入门友好,但是由于 IDE 的支持、ts 支持问题会导致维护困难,jsx 也是 js 上加的语法糖,但只有一个,无需太多记忆,学起来就像学 js 语法,比模板语法自由许多,react 相比 vue 有许多优点:
- 完整的 js 功能用来构建视图 UI(Vue template 中无法注入一些复杂逻辑)
- 直接引用当前 js 作用域变量(jsx 中可以直接使用 import 进来的东西,vue 不行)
- typescript 支持和 IDE 支持好,开发友好,重构方便(这个说句良心话,ms 当初搞 ts 是不支持 jsx 的,但是社区呼声太大才支持的 tsx,维护也是 ms,vue 就没那么幸运了,只能尤大拉个小团队维护 template 的 ts 支持,所以很难做的完善)
- 调试方便:jsx 调试可以直接定位到某一行代码错误,Vue 不行,只能自己摸头找找 bug。
性能 Vue 确实好一点,但是这一点用户不会有明显感知(差距太小),反而可维护性和重构升级是一个项目考虑的关键,毕竟大家都不希望以后接手的项目是一坨屎山
ts 的 void 类型指的是“不关心返回值是什么”的意思,可以看看官方文档:return-type-void。这个关键字是为了一些场景下编码方便(更加简洁),比如官方的例子:
void is not the same as undefined.
const src = [1, 2, 3];
const dst = [0];
src.forEach((el) => dst.push(el));
如果申明不是 void 类型,你只能写成:
const src = [1, 2, 3];
const dst = [0];
src.forEach((el) => { return dst.push(el); });
是不是麻烦很多,如果要明确函数无返回类型,应该用 undefined
:
interface Props {
onClick?: () => undefined;
}