一、Callback Hook
函数名:useCallback
用于得到一个固定引用值的函数,通常用它进行性能优化。
useCallback:
该函数只需要传入两个参数:一个回调函数和一个依赖数组即可。
1.函数,useCallback会固定该函数的引用,只要依赖项没有发生变化,则始终返回之前函数的地址。
2.数组,记录依赖项。
该函数会返回一个函数地址。
// 子组件
class Test extends React.PureComponent {render() {console.log("Test Render")return (<div><h1>{this.props.text}</h1><button onClick={this.props.onClick}>点击</button></div>)}
}
// 父组件
function Parent() {console.log("Parent Render")const [text, setText] = useState(123)const [n, setN] = useState(0)const handleClick = useCallback(() => {setText(text+1)},[text])return (<div>//<Test text={text} onClick={handleClick} /><input type="number"value={n}onChange={e => {setN(parseInt(e.target.value))}}/></div>)
}
当修改input输入框值n时虽然父组件渲染了,但由于传给子组件的handleClick 引用的地址没变(因为handleClick 依赖于text属性),所以子组件也不会重新渲染。其中onClick={handleClick} 这段话本质上也是将handleClick(外边的{}是jsx语法)作为属性传递给了子组件,因为属性未变,所以子组件也不会变化重渲染(子组件继承了PureComponent ),若不使用useCallback,则子组件也会重新渲染。