Хуки VS Классы
Разбор Мотивации
- Трудно повторно использовать логику состояний между компонентами
- Компонент с привязанным состоянием нельзя использовать в другом контексте.
- В любом случае получение данных нужно отделять от представления (Контейнеры/Компоненты).
- Сложные компоненты становятся трудными для понимания
- Не понятно, чем здесь могут помочь хуки?
- Сложный компонент на хуках, также труден для понимания.
- Части кода в классе можно выделять в методы и группировать связанные части.
- В функциональном компоненте код нельзя свободно перемещать, поскольку это всё часть тела функции.
- Не понятно, чем здесь могут помочь хуки?
- Классы путают как людей, так и машины
- (Тут нужен какой-нибудь мем.)
- Классы и this - это стандарт языка, которые нужно понимать.
- Хуки "заметают грязь под ковёр": можно не думать про this, но надо помнить про замыкания и пересоздание объектов, а это ещё сложнее.
- "Естественный барьер": Если разработчик не понимает this, то он и не должен разрабатывать важные части приложения.
Сравнение кода
- Reference
- Хуки
const FnComponent = (props) => { const ref = userRef(initValue); const someMethod = () => { ref.current = newValue; }; }
- Классы
class ClassComponent extends React.Component { ref = initValue; someMethod() { this.ref = newValue; } }
- Хуки
- State
- Хуки
const FnComponent = (props) => { const [state, setState] = useState(initValue); const someMethod = () => { setState(newValue); }; }
- Классы
class ClassComponent extends React.Component { state = initValue; someMethod() { this.setState(newValue); } }
- Хуки
- Callbacks
- Хуки
const FnComponent = (props) => { const callback = useCallback( () => { // code }, [...dependecyList] ); return <button onClick={callback}>Push me</button>; }
- Классы
class ClassComponent extends React.Component { callback = () => { // code }; render() { return <button onClick={this.callback}>Push me</button>; } }
- Хуки