react函数组件没有生命周期怎么解决?
1.useEffect是什么?
在react中,可以在生命周期中执行副作用操作,在react hooks中,可以在useEffect
中执行副作用操作。(注:副作用的来源:配置文件、用户的输入、数据库等等,所有的外部交互都有可能产生副作用,副作用会给程序带来安全隐患和不确定性,要尽可能的控制副作用在可控制的范围内发生。)
在 react 中componentDidMount
,componentDidUpdate
和 componentWillUnmount
这三个生命周期时候会执行。
2.函数结构
useEffect()
有两个参数,第一个参数是要执行的函数,第二个参数是一个依赖项数组(根据需求第二个参数可选是否填写)
(1).若不写第二个参数,函数操作每次都会执行 useEffect(method)
(2).若有第二个参数且数组里的变量不为空,则变量有变化时执行副作用操作,无变化则不执行. useEffect(()=>{doSomeThing}, [a])
, a 变化时执行(任意一个或全部变化)
(3).有第二个参数但为空,则副作用仅在组件挂载和卸载时执行。useEffect( ()=>{doSomeThing}, [])
3.副作用是否需要清除
(1).无需清除的副作用操作
直接在useEffect( method )
中传入操作函数method即可
(2).需要清除的副作用操作
比如监听事件,useEffect( method )
在method中添加了一个监听事件,取消监听只需要在method里return一个取消监听的函数即可
4.其他有依赖项数组的hook
待了解------------------------------------------------------------------------
useLayoutEffect、useCallback、useMemo
useLayoutEffect和useEffect的异同:
用法一样,两个参数,第一个时执行的函数,第二个是依赖项函数
useLayoutEffect会在所有的 DOM 变更之后同步调用 effect(浏览器进行绘制之前完成,即会阻塞浏览器的绘制.)
useEffect不会阻塞浏览器的绘制,大部分情况下都可以使用useEffect,render之后执行回调函数