关于useEffect执行两次的问题及解决.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

关于useEffect执行两次的问题及解决

目录useEffect执行两次问题父组件里面子组件里面react使用useEffect及踩坑useEffect介绍重要理解useEffect常见跳坑

useEffect执行两次问题

在useEffect第二个参数变化的时候,需要在父组件里面更改这个值的地方加一个判断,如果有值则设置为空,else更新这个值。useEffect第二个值可以是表达式

父组件里面

//授权树展示

??consthandleRoleModalVisible=(RoleModelVisibel:boolean,record:any)={

????setRoleModalVisible(RoleModelVisibel);

????//console.log(record)

????if(RoleModelVisibel==undefined){

??????setroleAuth(undefined)

????}else{

??????setroleAuth(record)

????}

??};

子组件里面

?const{roleAuth,treeData,roleModalVisible,handleRoleModalVisible}=props;

??useEffect(()={

????queryTreeId({role_id:roleAuth.roleId}).then(res={

??????setCheckedKeys(res.data.content)

??????setSelectedKeys(res.data.content)

????})

??},[roleAuth!==undefined])

在最后

?{

???roleAuthAuthorityroleAuth={roleAuth}?treeData={treeData}

???roleModalVisible={roleModalVisible}handleRoleModalVisible={handleRoleModalVisible}/

?}

react使用useEffect及踩坑

useEffect介绍

useEffect时reactHook中最重要,最常用的hook之一。

useEffect相当于react中的什么生命周期呢?

这个问题在react官网中有过介绍,在使用的过程中,容易被忽略,在面试的时候却经常被问及,(面试造航母,上班拧螺丝?),开个玩笑这个问题并不难回答,下面是react官方的原话:

如果你熟悉Reactclass的生命周期函数,你可以把useEffectHook看做componentDidMount,componentDidUpdate和componentWillUnmount这三个函数的组合。

componentDidMount组件挂载componentDidUpdate组件更新componentWillUnmount组件将要摧毁

useEffect需要传递两个参数,第一个参数是逻辑处理函数,第二个参数是一个数组

用法

useEffect(()={

/**执行逻辑*/

},[])

重要理解

一、第二个参数存放变量,当数组存放变量发生改变时,第一个参数,逻辑处理函数将会被执行

二、第二个参数可以不传,不会报错,但浏览器会无线循环执行逻辑处理函数。

useEffect(()={

/**执行逻辑*/

三、第二个参数如果只传一个空数组,逻辑处理函数里面的逻辑只会在组件挂载时执行一次,不就是相当于componentDidMount

useEffect(()={

/**执行逻辑*/

},[])

四、第二个参数如果不为空数组,如下

const[a,setA]=useState(1);

const[b,setB]=useState(2);

useEffect(()={

/**执行逻辑*/

},[a,b])

逻辑处理函数会在组件挂载时执行一次和(a或者b变量在栈中的值发生改变时执行一次)这是不是相当于componentDidMount和componentDidUpdate的结合

五、useEffect第一个参数可以返回一个回调函数,这个回调函数将会在组件被摧毁之前和再一次触发更新时,将之前的副作用清除

文档评论(0)

135****8957 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档