最近在总结之前的学习,今天就来总结下react最简单且基本的useState API。关于其使用,就不多讲了,直接可以去官网(https://zh-hans.reactjs.org/docs/hooks-state.html)。今天主要讲讲带回调的自定义usState的实现(有点类似于setState)那种。
代码:
import {useState,useEffect,useRef} from 'react'
exprot default function hookSetState(init){
let [state, setState] = useState(init)
let isUpdate = useRef()
// this.setState({state:state+1},cb)
let mySetState = (payload,cb)=>{
// setState的参数为上次的state
setState(prev=>{
isUpdate.cur = cb
return typeof payload === 'function' ? payload(prev) : payload
})
}
// 每次this.setState之后回调都会更新,这里就是利用useEffect的性质实现的
useEffect(()=>{
// 用ref来判断当前是挂载还是更新
if(isUpdate.cur){
isUpdate.cur()
}
})
return [state,mySetState ]
}
这样就可以实现在每次setState之后触发回调函数了。