常用的react hook

189 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情

Effect Hook

effect 效应;影响;结果 的意思 在react中 useEffect 可以在组件中执行操作

一般使用方法:


import { useEffect } from 'react'

useEffect(()=>{
    //一些方法
})

我最开始接触这个hook 是因为页面初始化后需要请求数据,加载进页面。 比如说有一个 getUserInfo() 的方法来拉去用户数据,那么可以:


import { useEffect ,useState} from 'react'
import { getUserinfo } from 'api'

const [userinfo,setUserinfo] = useState({})

useEffect(()=>{
    const ok = getUserinfo()
    
    setUserinfo(...ok)

})

Effect 还有一个返回函数,用以在react 清除的时候执行它,比如我们要在该页面加载后拉去用户信息。在页面卸载后再次把用户信息删除掉,这种情况下只需要在useEffect 中返回一个函数,在这个函数中定义删除用户信息的方法就可以了。


import { useEffect ,useState} from 'react'
import { getUserinfo } from 'api'

const [userinfo,setUserinfo] = useState({})

useEffect(()=>{
    const ok = getUserinfo()
    
    setUserinfo(...ok)
    
    return function clearUserinfo(){
        setUserinfo({})
    }

})

如果我们希望在组件中,随着父组件某个属性的变化,子组件做出相应的改变,也可以使用effect ,useEffect可以传入第二个参数,用以应对这种情况。

比如我们希望在 name变化的时候,子组件中随之相应变化


//子组件
const [name,setNmae] = useState()

useEffect(()=>{

   setName(name)

},[props.name])

react会自动帮你判断,props.name 是否变化了,如果变了就会做相应的方法,如果没有变化,就不会之星相应的操作。

那么如果只想执行一次effect ,可以在第二个参数处传入一个 [] 空数组。因为effect不依赖于props 或者state 中值,所以它只会运行一次。


import { useEffect ,useState} from 'react'
import { getUserinfo } from 'api'

const [userinfo,setUserinfo] = useState({})

useEffect(()=>{
    const ok = getUserinfo()
    
    setUserinfo(...ok)

},[])

如果第二个参数不传递[] 空数组的时候,会导致运行时,useEffect 更新状态,如果状态更新,就会再次出发useEffect。

第二个参数,[] 中可以传递多个值的时候,会比较每一个值,其中有一个变化的时候,就执行。