Vue3 的问题:
- 没有果断地将选项式标注为已废弃
- 没有固定一种明确且功能完善的写法(template sfc 缺少模板引用变量,无法替代 jsx 的可编程能力,目前常见写法有:选项式,组合式,jsx render sfc,defineComponent jsx,defineComponent 双重返回函数 jsx 五种)
- 官方没有为一种标准的写法打样(ng service,react ctx+reducer+hooks 都有官方文档打样)
题主一听,就是之前写 react,现在转来 Vue,他没有 Vue2 -> Vue3 的进阶
甚至分不清哪些 api 是 选项式,哪些是组合式
他看到的 Vue3 实话说,就是难用,就是无从下手
或者直接说实话吧,就我个人看来:
Vue2(包括选项式) >>> React class
Vue3 拉上选项式拖油瓶 <<< React hooks
// Vue jsx
const CompoVue = defineComponent(()=>{
const value = ref("")
return ()=><input value={value.value} onInput={e=> value.value = e.target.value}/>
})
// React
function CompoReact(){
const [value,setValue] = useState("")
return <input value={value} onChange={e=>setValue(e.target.value)}/>
}
本身 Vue 和 React 本质上来看就是响应式实现风格不同(不可变和可变)
但是为啥能搞出那么多 api?全都是向下兼容闹的啊?!
想用 Vue2,不能直接去用 Vue2 啊?为啥要在新框架给老用户留个保留地?
实际上 Vue3 的 api 应该只有这些(再加上传送门异步组件和几个新语法):
还有就是,为啥有生命周期啊?
生命周期是我最不能理解的,新框架谁有生命周期(除了 ng 事件驱动不得用以外),别人 solid 官网白纸黑字都说了不需要生命周期,为了简单功能快速实现不情不愿给了个 onMount
真就是为了老用户,连新用户也要埋进一些奇怪的东西进来么?
实话实说,我非常喜欢用 Vue,也很喜欢 Vue3
但是,仅限于我一个人写的 Vue3,很不喜欢和其他人一起写 Vue3 代码
要是别人很清醒,知道自己只有能力在 Vue3 中写 Vue2 代码还好,但是但凡开发者有点奇怪的想法,那这个代码就直接报警灾难了
就我的感受:
60% 开发者升级 Vue3 只是为了性能提升和数组响应式
80% 开发者在 Vue3 中写 Vue2 代码
99% 开发者不会在 Vue3 中用上真正的 ts
面试人的时候,10个宣称 Vue3 的面试者,有 9 个不知道 ts 函数重载,没人纳闷儿他们怎么声明的组件事件么?
这种社区的撕裂和混乱都已经摆在明面上了
放弃选项式吧,用选项式为啥不去 Vue2 用,就为了 3 的名头么?
还是为了让培训班老师有自信说出那句话:
你会 Vue2 就自动会 Vue3 了,学点 ts 基础包装三年面试一点问题都没有!
Vue 的优秀不妨碍 Vue 社区的烂,也不妨碍我不赞成 Vue 这种当妈式的溺爱社区的风格
解决一下题主的困惑吧
Vue3 本质和 React 功能性上没有区别,你可以先从 Vue jsx 写法入手,避开所有阐述选项式 api 的雷,相信不出两小时,掌握 Vue3 没有任何问题
如果你能区分并且想象出,数据可变和不可变下的写法差异(有一定 mobx 功底)
那你半小时学会 Vue3 手到擒来
Vue3 的 api 并不多,或者说,他的核心 api 甚至比 React 还少,毕竟没有 useTransition,useDefferedValue,useForm,use client, use server 等等 api
仅供参考!!!