это предпочтение, но сообщество движется в сторону хуков. Хуки + другие функции могут в значительной степени покрыть все, что сделано в хуках
например,
useEffect
=> componentDidMount, componentDidUpdate, componentWillMount
useState
=> this.setState({})
React.memo
=> shouldComponentUpdate
в классах кое-что проще, чем в хуках. как и второй аргумент в setState
, это обратный вызов, обеспечивающий изменение состояния перед выполнением. это возможно в хуках, но это не так чисто