Нет необходимости связывать функции / обратные вызовы в функциональных компонентах, поскольку в функциях нет this
. В классах было важно связать this
, потому что мы хотим убедиться, что this
в обратных вызовах ссылается на сам экземпляр компонента. Однако выполнение .bind
в конструкторе имеет еще одно полезное свойство - создавать функции один раз в течение всего жизненного цикла компонента, и новый обратный вызов не создавался при каждом вызове render()
. Чтобы инициализировать обратный вызов только один раз с помощью перехватчиков React, вы должны использовать useCallback
.
Классы
class Foo extends Component {
constructor(props) {
super(props);
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
console.log('Click happened');
}
render() {
return <Button onClick={this.handleClick}>Click Me</Button>;
}
}
Крючки
function Foo() {
const memoizedHandleClick = useCallback(
() => {
console.log('Click happened');
},
[], // Tells React to memoize regardless of arguments.
);
return <Button onClick={memoizedHandleClick}>Click Me</Button>;
}