最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 不要用生命周期!

    正文概述 掘金(杜帅在掘金)   2021-03-29   633

    为什么不要用生命周期?

    宏观上来说,在生命周期中添加的逻辑,会默认加上执行时机的逻辑

    这部分“调度”逻辑,是产品经理告诉你的么?

    不是!

    生命周期不是业务逻辑!

    不是业务逻辑,那你为什么要写?

    因为下意识?因为别人都这么写?还是 ——

    因为习惯

    在 Angular 2, React 16.8, Vue 3 之前,也就是 angular 2015 年前,react 18 年前,Vue 几年以前,写生命周期逻辑是默认写法

    为什么是默认写法?

    两点 ——

    1. 缺少直接的数据流/事件流开发方式
    2. 缺少依赖注入

    依赖注入让逻辑进行跨组件传递(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介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元