为什么不要用生命周期?
宏观上来说,在生命周期中添加的逻辑,会默认加上执行时机的逻辑
这部分“调度”逻辑,是产品经理告诉你的么?
不是!
生命周期不是业务逻辑!
不是业务逻辑,那你为什么要写?
因为下意识?因为别人都这么写?还是 ——
因为习惯?
在 Angular 2, React 16.8, Vue 3 之前,也就是 angular 2015 年前,react 18 年前,Vue 几年以前,写生命周期逻辑是默认写法
为什么是默认写法?
两点 ——
- 缺少直接的数据流/事件流开发方式
- 缺少依赖注入
依赖注入让逻辑进行跨组件传递(Vue provide/inejct, React Context/useContext, Angular servier),没有依赖注入,组件本身彼此隔离,框架可以理直气壮地将生命周期暴露给你
而没有 数据流/事件流 (详见之前的文章),业务逻辑本身割裂,框架更不可能有动力为你隐藏 MVVM 实现了
React 首先摒弃掉了所有生命周期回调,这是个巨大的进步(Angular 虽然动作更快,15年完成改造,但是 Rx 学习曲线太陡峭,ng 也妥协且保留了生命周期)
很多人拿着老代码的思维,去分析新代码,比如什么 useLayoutEffect 空数组就是 ComponentDidMount 之类的说法,完全就是没有理解新的开发方式(空数组代表没有依赖,出现了依赖,加个代码约束就会报错)
同理为 Vue 的 watch,watch 的第一个参数等同于 react 依赖数组,同时 watch 也相当于 React 的 useEffect + useLayoutEffect (通过 flush 区分,且可以用 immediate 跳过初始值,且有前后两值)
但是, Vue 有个自动依赖定位的函数: watchEffect
虽然对于老手而言,这是个神器,但是对于不熟悉 数据流响应式编程 的人来说,这是个巨大的深坑(详见之前的文章)
ng 是事件流响应式编程,虽然更极限,性能更强,但是思维负担极重,而工作中不需要你炫技
总而言之,这些开发方式能够生效的最主要原因,就是去掉生命周期
框架隐藏了 MVVM 实现
你的代码,就是实现你的逻辑,直接翻译产品经理的泳道流程图即可(如果他们有水平画的话)
而生命周期,存在一复用就崩,一扩展就死的情况
逼着你用 Redux/Vuex/ngRx 等奇怪工具 (需要把生命周期dispatch以重新封装成逻辑,因为生命周期涉及整个组件树,所以必须强制全局声明,导致局部惰性初始化无法进行)
在 React 和 Vue 中,因为存在 async render 的需求(个人不觉得这个东西有什么用),所以 视图响应和数据响应割裂,你必须在 useLayoutEffect 或者 watch flush:'post' 中获取视图变更,相比之下,ng 的 delay(0) 获取视图变更更加高效,事件流完全不会中断,开发效率更高(也更打脑袋)
总而言之,去掉生命周期,抛弃生命周期,你才能够畅通地进行复用,摆脱框架耦合
毕竟,复用是一切开发的基础
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!