
const [isFocus, setIsFocus] = useState<boolean>(false)
const changeFocus = () => {
setIsFocus(!isFocus)
}
useEffect(() => {
console.log(isFocus)
// do something
}, [isFocus])因为
setState是异步的 所以调用setState之后无法立刻拿到最新的值 使用setTimeout也不行 解决办法 使用useEffect以isFocus为依赖 触发副作用然后做你想做的事
const handleCardRead = useCallback(debounce(() => {
// do something
}), [])
const handleCardRead2 = useRef(debounce(() => {
// do something
})).current由于函数式组件每次
render都会导致在函数内部定义的变量都会被重新初始化;意味着每次调用debounce函数时都会重新注册一个setTimeout回调 使用useRef返回的值被缓存了起来 因此函数式组件重新渲染不会导致debounce的重复执行 使用useCallback声明只在组件初始化时创建debounce函数 第二个参数依赖需要设置为空数组
antd框架 通过 onChangeconst test: React.FC = () => {
const [value, setValue] = useState('')
const onChange = value => {
setValue(value.target.value)
}
return(
<Input value={value} onChange={onChange} />
)
}useRefconst test: React.FC = () => {
const input = useRef<HTMLInputElement>(null)
const handleClick = () => {
console.log(input.current.value)
}
return (
<div>
<input type="text" ref={input} />
<button onClick={handleClick}></button>
</div>
)
}