当被问及中hook函数的运行机制时,我觉得非常有必要专门写一篇文章来解释一下。 好,我们快速了解一下: 1. 什么是钩子?
Vue中有Hook函数,Git中的很多命令也有相应的Hook。 Vue的插件机制也是基于“hooks”的。 我不知道你第一次听到“钩子”这个词是在哪里。 如果你明白了,那就更有必要了。 让我们想想其中的联系。 我是这样理解的:
Hooks是一些有明确生命周期的框架工具,保留给用户在生命周期的各个阶段执行一些特定的操作。 这实际上是一种面向切面编程。
这里有两个关键词,既定的生命周期和面向切面
只有具有**已建立的生命周期**的框架工具才需要为用户定义的操作预留空间。 这里举一个简单的例子(对于不了解的同学来说可能并不简单): gulp的工作方式是定义一个串行化的任务管道流,可以自由拼接各种任务。 这称为无既定生命周期。 这时候,hooks就没有意义了; 但这是不同的。 它已经定义了分析、编译、打包和输出。 整个工作流程,如果你想在编译之后、打包输出之前做一些事情,而不给你任何钩子介入,那么你所有的努力都会白费。 这就是钩子的意义。 还记得下面两张图是出自哪篇文章吗?
吞咽管道流量
生命周期
为什么要提到**面向方面**? 第一次听到这个词是在写Java的时候。 是核心思想之一(不得不说前端从石器时代发展到了今天的工业时代,借鉴了很多后台编程思想,所谓类比,就是这样)。 动用你的想象力。 所谓勾,是指在框架工具的某一阶段切刀并插入一个或多个特定操作。 如果想不清楚的话,就看看墙想想吧~~
2、吊钩的操作机构
前面说过,勾是在框架工具的某一阶段插入一把刀,以执行一项或多项特定操作。 那不就是调用一个或多个用户定义的函数吗?
更直接一点,就是在框架工具生命周期的某个阶段调用约定的函数,比如Vue。 当组件被渲染时,组件方法被调用。 当组件更新时,执行组件方法。
为了更加横向,实现一套事件机制。 在生命周期的某个阶段,会触发特定的事件,并执行该事件下注册的所有函数。 说起事情来,有人又头皮发麻了,所以,我体谅一下。 画一张图: