react

110 阅读1分钟

react实现watch

import React, { useRef, useEffect } from 'react';

function useWatch(value, callback, config={immediate: false}){
  const oldValue = useRef()
  const isInit = useRef(false)
  const isWatch = useRef(true)

  useEffect(() => {
    if(isWatch.current){
      if(!isInit.current){
        isInit.current = true
        if(config.immediate){
          callback(value, oldValue.current)
        }
      }else{
        callback(value, oldValue.current)
      }
      oldValue.current = value
    }
  },[value])

  const unWatch = () => {
    isWatch.current = false
  }

  return unWatch
}