vue 钩子函数执行顺序

红酒瓶尺寸2023-05-06  21

原文链接: >

生命周期钩子函数:指的是React组件在经过某些特殊的过程是会触发组件里面特定的方法,这里称为钩子函数(下面举三个常用的钩子函数)。

举几个简单例子:(具体全量的可以自行百度下,都有比较全面的介绍的)

componentWillMount: 挂载之前触发调用次函数,可以操作数据,此时还没有生成实际的DOM,处于VirtualDOM的状态。(这个状态可以做一些数据处理,查询、处理页面渲染需要的数据)

componentDidMount: 页面已经渲染完成,在网页上已经生成实际的DOM(此时可以操作页面的dom元素,documentgetElementById可以获取到具体的dom对象,比如获取canvas对象,加载echarts图面,都可以在这个函数里进行操作)

componentWillUnmount: 组件卸载之前触发这个方法。(在这里可以处理一些页面状态销毁的操作,例如clearTimeout等)

问得不清楚,所以不懂怎么回答这个区别。

所谓回调函数,一般就是把函数的地址作为参数传进去,让调用的函数在内部可以调用这个函数。

例子:

void

CALLBACK

fun(){}

这是一个函数,回调函数

void

AAA(int

a,

Fun

p);

这是一个普通函数,但第二个参数是fun

AAA(5,

fun);

钩子函数,严格算起来,也算是回调函数的一种。但钩子函数是针对的截取的,当你使用了钩子之后,每当触发到相对应的消息,系统就会先“执行你写的回调函数”。

即原本是:系统-->目标函数

使用钩子就变成:系统-->你写的回调函数-->目标函数

大概原理就是这样子。就不知道你对函数与钩子的了解水平如何了

RTT在空闲的时候可以使用钩子函数执行些简单的任务,例如LED闪烁之类的程序,利用这个功能我们可以做个工作状态指示灯

要使用钩子必须在配置里打开钩子的配置,在rt-configh里添加HOOK宏定义(如果没有的话)

#define

RT_USING_HOOK

然后在应用程序里设置钩子函数

#ifdef

RT_USING_HOOK

rt_thread_idle_sethook(rt_hw_led_flash);

#endif

下面就是该怎样实现这个函数了

void

rt_hw_led_flash(void)

{

rt_uint32_t

i;

rt_hw_led_init();

while

(1)

{

for(i

=

0;

i

<

2700000;

i++);

//500ms

GPIO_WriteBit(state_led_gpio,

state_led_pin,

(BitAction)(1-GPIO_ReadOutputDataBit(state_led_gpio,

state_led_pin)));

}

}

这样写过之后,在系统空闲的时候就会执行这个函数,当然,如果系统繁忙的时候是不会进入这个idel任务的,不过如果系统一直处于繁忙的状态就是有问题了

另外一点记住,在这个函数里不能调用系统提供的使线程挂起的函数

例如:

rt

thread

delay,

rt

sem

take

while

(1)

{

for(i

=

0;

i

<

2700000;

i++);

//500ms

GPIO_WriteBit(state_led_gpio,

state_led_pin,

(BitAction)(1-GPIO_ReadOutputDataBit(state_led_gpio,

state_led_pin)));

}

关键是这个while(1)没跳出的,所以全部在这里执行了。

好像还有同学对其中一些并不是完全清楚,所以继续解析下,当做结贴:

1

idle线程是系统中最后一道防线,它将是系统中,如果无其他事可干时的最后能够运行的线程。

--

所以idle线程不应该被阻塞。如果你有自己的线程能够成为这最后一道防线,那么这个限制将不存在。而对于一些原来系统中放在idle线程中做的工作(例如原来的最终的线程删除动作),在04x中,可以手工调用rt_thread_idle_excute函数来执行。

2

当系统空闲的时候,idle线程将执行这个钩子函数。

假设钩子函数一次运行会执行1ms,如果idle线程有机会运行200ms,那么钩子函数将被调用200次。

3

钩子函数运行时,不应该把idle线程总是纠结在这个函数中运行,必须要让idle线程有机会去运行rt_thread_idle_excute函数(因为还有一些事情等待idle线程去处理)。

--

所以在钩子函数中,不应该使用while(1);的方式。

while(1)

{

if

(

indicator

==

RT_TRUE)

{

do

something

}

else

delay(20ms)

}

这样那20ms会执行idle线程吧,问题是idle

20ms够吗,如果我改20ms为5ms呢

如果没有其他线程处理事务,将转换到idle线程去,通常idle线程中的系统任务会在0xx

ms以内执行完毕

①自定义指令是什么?以及自定义指令的使用场景

    在Vue中,有很多内置指令,但是这些指令只能满足我们最基础的使用,当我们在实际项目中遇到了必须要对DOM进行操作的逻辑时,我们就用到了自定义指令

②自定义指令的钩子函数

    bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。

    inserted:被绑定元素插入父节点时调用 

    update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新。

    componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。

    unbind:只调用一次,指令与元素解绑时调用。

    在父组件给子组件传值的时候,给子组件加一个判断,如果数据没有请求到就不渲染当前组件

    vue-router传参两种方式:params和query

方法一:

    query 方式传参和接收参数

     传参:

     接收参数:

       this$routequeryid

    传参是this$router,接收参数是this$route

两者区别:

        $router为VueRouter实例,想要导航到不同URL,则使用$routerpush方法

        $route为当前router跳转对象,里面可以获取name、path、query、params等

方法二:

     params方式传参和接收参数

    传参:

接收参数: this$routeparamsid

query和oarams的区别:

    query相当于get请求,页面跳转的时候,可以在地址栏看到请求参数,而params相当于post请求,参数不会再地址栏中显示

    全局导航钩子:beforeEach、afterEach

    组件内导航:beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave

    独享导航守卫:beforeEnter

以上就是关于vue 钩子函数执行顺序全部的内容,包括:vue 钩子函数执行顺序、什么是react生命周期和生命周期钩子函数、回调函数 钩子函数 有什么区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

转载请注明原文地址:https://juke.outofmemory.cn/read/3814789.html

最新回复(0)