Size: a a a

React — русскоговорящее сообщество

2020 July 16

DT

Daniil Tchernyavsky in React — русскоговорящее сообщество
Dmitry Kazakov
В целом недостатки хуков можно разбить на семантические (синтаксис, основанный на соглашениях), анти-best-practice (смешение синхронного и асинхронного кода, сайд-эффекты в колбэках, раздувание чистых функций и смешение ответственности), сложностей в композиции (т.к. нет доступа к общим props и context, приходится передавать их в каждую функцию напрямую, что приводит к запутанному клубку), деградации перфоманса (т.к. приходится либо обкладывать многие части useCallback / useMemo, либо логика будет пересоздаваться на каждый ререндер и не будет работать сравнение по ссылкам).
В классах же:
- инкапсулированная логика с методами, в которых уже есть доступ к props, context и другим методам
- чистые render-функции
- человекопонятный жизненный цикл
- простота установки переменных (ref / не ref)
- одинаковые функции типа this.handleChange без оборачивания в дополнительный useCallback (бонус — легкость удаления обработчиков вроде addEventListener)
- возможность применения декораторов в @-синтаксисе как глобально к классу, так и к методам
а зачем хендлеры в юзколбек ты оборачиваешь?
источник

DS

Dmitriy Shuleshov in React — русскоговорящее сообщество
Dmitry Kazakov
В целом недостатки хуков можно разбить на семантические (синтаксис, основанный на соглашениях), анти-best-practice (смешение синхронного и асинхронного кода, сайд-эффекты в колбэках, раздувание чистых функций и смешение ответственности), сложностей в композиции (т.к. нет доступа к общим props и context, приходится передавать их в каждую функцию напрямую, что приводит к запутанному клубку), деградации перфоманса (т.к. приходится либо обкладывать многие части useCallback / useMemo, либо логика будет пересоздаваться на каждый ререндер и не будет работать сравнение по ссылкам).
В классах же:
- инкапсулированная логика с методами, в которых уже есть доступ к props, context и другим методам
- чистые render-функции
- человекопонятный жизненный цикл
- простота установки переменных (ref / не ref)
- одинаковые функции типа this.handleChange без оборачивания в дополнительный useCallback (бонус — легкость удаления обработчиков вроде addEventListener)
- возможность применения декораторов в @-синтаксисе как глобально к классу, так и к методам
Это просто у тебя СТМ нет нормального
источник

DT

Daniil Tchernyavsky in React — русскоговорящее сообщество
читал зачем вообще этот хук?
источник

DK

Dmitry Kazakov in React — русскоговорящее сообщество
Dmitriy Shuleshov
Это просто у тебя СТМ нет нормального
чего у меня нет?)
источник

АБ

Александр Бакиматов... in React — русскоговорящее сообщество
типа мы будем писать бизнес логику там где ее быть не должно и ругать за это конструкции UI либы?
источник

DS

Dmitriy Shuleshov in React — русскоговорящее сообщество
Dmitry Kazakov
чего у меня нет?)
Стейт менеджера
источник

DK

Dmitry Kazakov in React — русскоговорящее сообщество
Dmitriy Shuleshov
Стейт менеджера
при чем тут он вообще
источник

DT

Daniil Tchernyavsky in React — русскоговорящее сообщество
что за общие пропсы?
источник

DK

Dmitry Kazakov in React — русскоговорящее сообщество
Daniil Tchernyavsky
а зачем хендлеры в юзколбек ты оборачиваешь?
чтобы ссылки были одинаковые
источник

VK

Vladimir Klimov in React — русскоговорящее сообщество
Dmitry Kazakov
В целом недостатки хуков можно разбить на семантические (синтаксис, основанный на соглашениях), анти-best-practice (смешение синхронного и асинхронного кода, сайд-эффекты в колбэках, раздувание чистых функций и смешение ответственности), сложностей в композиции (т.к. нет доступа к общим props и context, приходится передавать их в каждую функцию напрямую, что приводит к запутанному клубку), деградации перфоманса (т.к. приходится либо обкладывать многие части useCallback / useMemo, либо логика будет пересоздаваться на каждый ререндер и не будет работать сравнение по ссылкам).
В классах же:
- инкапсулированная логика с методами, в которых уже есть доступ к props, context и другим методам
- чистые render-функции
- человекопонятный жизненный цикл
- простота установки переменных (ref / не ref)
- одинаковые функции типа this.handleChange без оборачивания в дополнительный useCallback (бонус — легкость удаления обработчиков вроде addEventListener)
- возможность применения декораторов в @-синтаксисе как глобально к классу, так и к методам
Идинственное из этого всего что справедливо, на мой взгляд - синтаксис, основанный на соглашениях (типа, что важен порядок вызова, и т.п.)
источник

DS

Dmitriy Shuleshov in React — русскоговорящее сообщество
У меня вот в последнем проекте ни одного useEffect и почти нет useState в моем коде
источник

DT

Daniil Tchernyavsky in React — русскоговорящее сообщество
Dmitry Kazakov
чтобы ссылки были одинаковые
и ты каждое оборачиваешь?
источник

АБ

Александр Бакиматов... in React — русскоговорящее сообщество
Dmitry Kazakov
чтобы ссылки были одинаковые
зачем тебе везед одинаковые ссылки?
источник

МК

Максим Кавецкий... in React — русскоговорящее сообщество
Oleg Rizhkov
jsx vs code гугли.
Понял, спасибо вам и всем остальным за ответ!
источник

DK

Dmitry Kazakov in React — русскоговорящее сообщество
Daniil Tchernyavsky
и ты каждое оборачиваешь?
на классах это вообще не нужно, а на хуках где-то приходится писать для перфоманса
источник

DT

Daniil Tchernyavsky in React — русскоговорящее сообщество
не нужно это там
источник

DT

Daniil Tchernyavsky in React — русскоговорящее сообщество
это наоборот вреда принесет при постоянном использовании на всех хендлерах
источник

OR

Oleg Rizhkov in React — русскоговорящее сообщество
Dmitry Kazakov
В целом недостатки хуков можно разбить на семантические (синтаксис, основанный на соглашениях), анти-best-practice (смешение синхронного и асинхронного кода, сайд-эффекты в колбэках, раздувание чистых функций и смешение ответственности), сложностей в композиции (т.к. нет доступа к общим props и context, приходится передавать их в каждую функцию напрямую, что приводит к запутанному клубку), деградации перфоманса (т.к. приходится либо обкладывать многие части useCallback / useMemo, либо логика будет пересоздаваться на каждый ререндер и не будет работать сравнение по ссылкам).
В классах же:
- инкапсулированная логика с методами, в которых уже есть доступ к props, context и другим методам
- чистые render-функции
- человекопонятный жизненный цикл
- простота установки переменных (ref / не ref)
- одинаковые функции типа this.handleChange без оборачивания в дополнительный useCallback (бонус — легкость удаления обработчиков вроде addEventListener)
- возможность применения декораторов в @-синтаксисе как глобально к классу, так и к методам
ну, на самом деле хуки не панацея, я слышал. там отзывались о них, как о не всегда очевидных, что это не семантически и что-то в этом роде. но это от больших дядек, у меня слишком мало опыта, чтоб понять, что с хуками не так. но с ними определённо что-то не так.
источник

DS

Dmitriy Shuleshov in React — русскоговорящее сообщество
Dmitry Kazakov
на классах это вообще не нужно, а на хуках где-то приходится писать для перфоманса
Были прецеденты или в доке прочел?
источник

DK

Dmitry Kazakov in React — русскоговорящее сообщество
Daniil Tchernyavsky
не нужно это там
тогда дочерние компоненты у тебя будут перерендериваться
источник