Всем привет!
Переодически под моими видео люди спрашивают под видео почему я использую классы (если там они используются).
Решил раз и на всегда написать пост, чтобы можно было на него ссылаться.
Во первых, в самих классах ничего плохого не вижу. Не использовать их мне кажется каким-то идеализмом, из того же рода, что никогда не мутировать структуры данных.
С самим ООП есть проблемы, когда присутствует большой уровень наследования, а в остальных случаях думаю проблем нету.
Так вот, касательно плюсов классов:
1) Мне просто нравится, что в TS сразу же у тебя сгенерируется тип для твоего инстанса, в случае с функцией нужно создавать интерфейс либо же юзать
2) Из мелочей, есть плюс того, что методы будут храниться в прототипе, а не создаваться на каждый рендер.
3) Также несмотря на проблемы с наследованием, прикольно юзать его на 1 уровень. Например, тот же
Я сам подобные наследуемые классы редко пишу, но для библиотек может быть полезно.
В остальном, сильных предпочтений не имею. Насколько я знаю, классы лучше оптимизируются самим V8 (вот тут на 100% не уверен), но зато плохо анализируются различными сборщиками. Часто из-за них ломается tree shaking.
Помню даже в статье про переход на функциональные компоненты команда React рассказывала про проблему с анализом кода, как одну из причин их решения.
В общем, правильного пути тут нет, просто делаюсь своим мнением. Всем хорошего вечера!
#devtips #classes
Переодически под моими видео люди спрашивают под видео почему я использую классы (если там они используются).
Решил раз и на всегда написать пост, чтобы можно было на него ссылаться.
Во первых, в самих классах ничего плохого не вижу. Не использовать их мне кажется каким-то идеализмом, из того же рода, что никогда не мутировать структуры данных.
С самим ООП есть проблемы, когда присутствует большой уровень наследования, а в остальных случаях думаю проблем нету.
Так вот, касательно плюсов классов:
1) Мне просто нравится, что в TS сразу же у тебя сгенерируется тип для твоего инстанса, в случае с функцией нужно создавать интерфейс либо же юзать
ReturnType<typeof createSomeObject>
.2) Из мелочей, есть плюс того, что методы будут храниться в прототипе, а не создаваться на каждый рендер.
3) Также несмотря на проблемы с наследованием, прикольно юзать его на 1 уровень. Например, тот же
EventEmitter
так используют часто и React
раньше использовал подобный паттерн для компонентов. Я сам подобные наследуемые классы редко пишу, но для библиотек может быть полезно.
В остальном, сильных предпочтений не имею. Насколько я знаю, классы лучше оптимизируются самим V8 (вот тут на 100% не уверен), но зато плохо анализируются различными сборщиками. Часто из-за них ломается tree shaking.
Помню даже в статье про переход на функциональные компоненты команда React рассказывала про проблему с анализом кода, как одну из причин их решения.
В общем, правильного пути тут нет, просто делаюсь своим мнением. Всем хорошего вечера!
#devtips #classes
legacy.reactjs.org
Introducing Hooks – React
A JavaScript library for building user interfaces
👍41💯2❤1👎1🏆1🍓1