我在一个名为UseEffect
的自定义钩子中使用UseEffect
,我在两个组件中使用这个UseEffect
,即(第一个,第二个),但是UseEffect
只有在呈现第一个
和第二个
组件GET时才会调用。
例如
我有第一个组件
import React,{useState} from 'react'
import useCustomHook from './customHook'
function First(){
console.log("component First rendering")
const [count,setCount]=useState(0)
useCustomHook(count)
return (<div>First component</div>)
}
这是我的第二个组成部分
import React,{useState} from 'react'
import useCustomHook from './customHook'
function Second(){
console.log("component Second rendering")
const [count,setCount]=useState(0)
useCustomHook(count)
return (<div>Second component</div>)
}
这是我的定制钩
import {useEffect} from 'react'
function useCustomHook(count){
console.log("useCustomHook getting called")
useEffect(()=>{
console.log("useEffect gets called") //this function is running after both component rendered
},[count])
}
我的主应用程序组件
import First from './first'
import Second from './second'
function App(){
return (
<div>
<First/>
<Second/>
</div>
)
}
我的控制台输出是:
1)组件首次渲染
2)useCustomHook被调用
3)组件二次渲染
4)useCustomHook被调用
5)(2)调用useEffect
我想知道
为什么5
行的输出不在2
行之后,为什么第二
组件日志发生在2
行之后,因为UseEffect
应该在第一
组件调用UseComHook
之后而在第二
组件日志调用之前调用。 为什么useCustomHook
中的useEffect
没有在second
组件日志之前被调用。
你提到的顺序完全有道理,这就是hooks的工作原理。
流程:
第一个
组件开始执行。第一个
组件中,在UseCustomHook(count)
代码行之后,将执行UseCustomHook
UseCustomHook
中,将打印console.log并执行useEffect,注册useEffect进行的回调而不执行。first
组件返回JSX。 即组件已装入/呈现。first
组件,就会调用UseCustomHook
中的UseEffect的回调。first
组件内的UseCustomHook
的作用域是该组件。第二个组件也一样。。。