1. 获取上一轮的props或者state
function usePrevious(value){
const ref = React.useRef();
useEffect(()=>{
ref.current = value
},[value])
return ref.current;
}
2. 获取窗口大小
function useWinSize(){
const [size,setSize] = useState({
width:window.innerWidth,
height:window.innerHeight
})
const onResize = function() {
setSize({
width:window.innerWidth,
height:window.innerHeight
})
}
useEffect(()=>{
window.addEventListener('resize',onResize)
return ()=>{
window.removeEventListener('resize',onResize);
}
},[])
return size;
}
3. 获取鼠标位置
function useMouse(){
const [position,setPosition] = useState({x:0,y:0});
const update = function(e) {
setPosition({x:e.pageX,y:e.pageY});
}
useEffect(()=>{
document.addEventListener('mousemove',update);
return ()=>{
document.removeEventListener('mousemove',upadte);
}
},[])
return position;
}
4. 跳过useEffect首次更新
function useDidUpdateEffect() {
const didMountRef = useRef(false);
useEffect(()=>{
if(!didMountRef.current) {
didMountRef.current = true;
}
},[])
return didMountRef.current;
}
function useDidUpdateEffect(fn, inputs) {
const didMountRef = useRef(false);
useEffect(() => {
if (didMountRef.current) {
return fn();
}
didMountRef.current = true;
}, inputs);
}