Я недавно начал использовать хуки и переносил существующие компоненты класса на хуки.Среди нескольких преимуществ использования хуков, один аспект, который я не мог понять, это то, как передаются обратные вызовы.
В хуках вводится useCallback
, который обеспечивает запомненный обратный вызов, так что при каждом повторном рендеринге не нужно создавать новый метод без необходимости.,Но все же, пройдя настройку API , я вижу, что для каждого рендера он по-прежнему много делает.
API класса, с другой стороны, обеспечивает простой способ привязки обратного вызова один раз иследовательно, не будет никаких дополнительных миксинов для каждого рендера.
Пример кода для сравнения:
/**
* Hooks
*/
function Test() {
const handleCallback = React.useCallback(() => {
/**
* Callback handler implementation
*/
}, [/** deps */]);
return <ChildComponent callback={handleCallback} />;
}
/**
* Class API
*/
class Test extends React.Component {
handleCallback = () => {
/**
* Callback handler implementation
*/
};
render() {
return <ChildComponent callback={this.handleCallback} />;
}
}
Цитирование из документов :
Хуки позволяют упорядочить побочные эффекты в компоненте по тем, с чем они связаны (например, добавление и удаление подписки), вместо принудительного разделения на основе методов жизненного цикла.
Достигнут ли этот перфоманс ожидаемый компромисс между наличием всех фигур в одном месте?
Был бы сценарий, в котором вы бы использовали встроенный обратный вызов, так как это всегда приводило бы к повторному рендерингу дочерних элементов,В этом случае useCallback
почти всегда не требуется ?