
Aleh
21.03.2017
14:09:22
его только в 7 добавили ж

Ҫѐҏӗѫӑ
21.03.2017
14:09:29
нет
https://github.com/babel/babel/commits/7.0/packages/babel-plugin-transform-decorators/src/index.js
ой

Google

Ҫѐҏӗѫӑ
21.03.2017
14:09:44
history кликни

Aleh
21.03.2017
14:09:54
а, да
просто в stage-1 их не юзали
а юзали легаси
а теперь stage-1 свичнули на этот

Ҫѐҏӗѫӑ
21.03.2017
14:13:48
ваще там чуваки пишут, что ждут стейдж 3)

Petr
21.03.2017
15:00:43
@klond90 в редьюсерах вычисляется бизнес логика, которая по большму счёту framework agnistic. Если у тебя в редьюсерах 26мс, то и на angular, и на jquery и на vanila у тебя будут эти 26мс на бизнес логике. Проблема чисто в js функциях твоих, которые бизнес-вычислениями занимаются
фибоначи считаешь?

KlonD90
21.03.2017
15:01:26
у меня 1мс но это уже пиздец
вряд ли оно связано именно с бизнес логикой. а скорее с деелением по сабредьсюмерам и постояннйо сборкой разборкйо и свитчами которых тысячи

Max
21.03.2017
15:02:34

Petr
21.03.2017
15:02:36
свитчи - встроенная конструкция JS, даже если их 1000 - это наносекунды

Max
21.03.2017
15:02:46
туда уже чистые данные должны попадать

Google

KlonD90
21.03.2017
15:02:47
я почти наверняка уверен что если вместо 100 редсусеров написать одну функцию развесистый такой свитч

Сергей
21.03.2017
15:03:00

KlonD90
21.03.2017
15:03:34

Petr
21.03.2017
15:04:23
> @sergeysova
свитчи медленнее else/if
если инфа 100%, тогда @klodon пусть на if/else всё перепишет - сравним!

Evgeny
21.03.2017
15:05:43
В принципе логично, да

Max
21.03.2017
15:06:10
у меня редакса по-минимуму щас
я пока к этой тонкой теме не подходил
но есть подозрение что будут сервисы-синглтоны
в которые буду инжектить стор
а они уже будут этой херней заниматься

KlonD90
21.03.2017
15:08:05

Petr
21.03.2017
15:08:07
про моветон в редьюсерах не понял.

Max
21.03.2017
15:08:20

Сергей
21.03.2017
15:08:22

Max
21.03.2017
15:08:37

Petr
21.03.2017
15:09:01
бизнес логика - тоже чистая функция! получил данные, посчитал, вернул

Max
21.03.2017
15:09:01
соответственно никакой логики

Evgeny
21.03.2017
15:09:24
Я вообще handleActions использую из redux-actions

Google

Max
21.03.2017
15:09:25
если что-то получил, посчитал, вернул то да

Evgeny
21.03.2017
15:09:35

Max
21.03.2017
15:09:38
если куда-то дальше обращается, то уже нет

Evgeny
21.03.2017
15:09:40
Адекватнее же выглядит

Сергей
21.03.2017
15:09:49
точно так делаю!

Evgeny
21.03.2017
15:09:52
Чем свитчи-хуитчи

Дмитрий
21.03.2017
15:10:05
Во во)

Petr
21.03.2017
15:10:08
куда-то обращаться - это сайд-эффекты, они безусловно вне редьюсеров должны происходить.

Сергей
21.03.2017
15:10:14
только функция немного другая, префикс дописывает

Pavel
21.03.2017
15:10:17

Max
21.03.2017
15:10:29
вот
лукапы быстрее )

Дмитрий
21.03.2017
15:10:47
А я у себя посмотрел - большая часть времени, занимаемого диспатчем все равно тратится на апдейт реакта

Mikhail
21.03.2017
15:10:51
всяко

Petr
21.03.2017
15:11:29
мда, таблица сравнения производительности ещё раз доказала, что дело не в самой конструкции swtich/case

Сергей
21.03.2017
15:11:36
я кстати брал старый проект, на 0.13 версии Реакта, с дохренище сложным UI и тучей компонентов и посмотрел перфоманс
вот хуже всего работает реакт, хотя мы там выжимали что могли

Petr
21.03.2017
15:11:40
разница +/-1%

Mikhail
21.03.2017
15:12:00
разница есть
if/switch занимет код, а значит ВМ, а занчит память
лукап динамичен, и скорость выше, парсер не пашет

Google

Petr
21.03.2017
15:13:27
далее посмотрим на абсолютные цифры: миллиард операций в секунду. У @klond90 1000 switch/case - это 1мс от которой +/-1% можно сэкономить

Влад
21.03.2017
15:13:33
В каком лучше месте нормализовать данные которые пришли после запроса? Прямо в редьюсере?

Mikhail
21.03.2017
15:14:09
ну и как говорят опологеты, каждый if увеличивает сложность приложения в 2 раза ))

Влад
21.03.2017
15:14:19
Или мидлвэйр запилить?

Petr
21.03.2017
15:14:38
чтобы найти тормоза, надо js код логики редьюсеров смотреть, а не swith/case менять на if/else или lookup

Pavel
21.03.2017
15:15:37

Сергей
21.03.2017
15:15:46

Petr
21.03.2017
15:15:47
но лучше в actionCreator, да

Admin
ERROR: S client not available

Сергей
21.03.2017
15:16:14

Влад
21.03.2017
15:16:51

Max
21.03.2017
15:17:10
я вот понимаю стор это репозитарий
т.е. save/load данных из хранилища
побочного говна там быть не должно

Petr
21.03.2017
15:17:29

Влад
21.03.2017
15:19:36
Ещё есть вариант прямо в саге

Pavel
21.03.2017
15:19:45

Влад
21.03.2017
15:19:56
Но вот мне кажется что мидлвэйр получше выглядит

Pavel
21.03.2017
15:20:39

Google

Max
21.03.2017
15:21:27
интересно
те кто топит за бизнес-логику в мидлварях — насколько большой опыт разработки вне реакта?
я просто помимо реакта еще на беке пишу

Сергей
21.03.2017
15:23:18

Max
21.03.2017
15:23:19
как-то вообще такой подход не могу уложить в голове

Petr
21.03.2017
15:25:24
весьма абстрактное обсуждение получается, кто-то говорит что в редьюсерах не должно быть "операций", кто-то говорит что там не должно быть "побочного говна". Давайте конкретный пример рассмотрим и обсудим: у меня приложение кредитный калькулятор. Пользователь подпинул ползунок "сумма кредита" или ползунок "срок" - возникаются соответсвующие Actions. Надо перемножить кучу коэффициентов, применить какие-то крутые алгоритмы и выдать на экран пользователю "это вам будет стоить X% годовых и в итоге вы переплатите Y руб.". Где бы вы написали весь код умножающий/складывающий/вычисляющий X и Y? Варианты ответов (по мере выполнения в js): A) actionCreator; B) reducer; C) mapStateToProps/reselect ?

Pavel
21.03.2017
15:26:08
(A) пишется комплексный actionCreator с redux-thunk с доступом к store и там все делается

Petr
21.03.2017
15:26:10
в данном примере нет обращения к серверу

Max
21.03.2017
15:26:12
до actionCreator в сервисе

Сергей
21.03.2017
15:26:15
диспатчишь апдейт кокнретного значения, в стор доходит всегда один и тот же экшен
— миддлвара рассчитала изменения

Petr
21.03.2017
15:27:03
кто знает как запилить голосование? Сделайте этот пример через голосование telegramm, пожалуста

Сергей
21.03.2017
15:27:16

Aleh
21.03.2017
15:28:48

Сергей
21.03.2017
15:29:07
все рассчеты в одном месте, в редюсере один экшен

Pavel
21.03.2017
15:29:42
> до actionCreator в сервисе
Тоже вариант при вызове одиночного итогового actionCreator. Но если это делается нарпимер в компоненте, то не лучший вариант.
Комплексный actionCreator сработает даже при unmount компонента.

Сергей
21.03.2017
15:30:22
типа:
dispatch UPDATE_MONTHS -> middlware calcs -> dispatch UPDATE_CALC_DATA
dispatch UPDATE_TOTAL -> middlware calcs -> dispatch UPDATE_CALC_DATA
хотя возможно я несу хуйню

Aleh
21.03.2017
15:30:47
так ну есть функция function calculateCredit(amount, term) возвращает объект Credit с нужными полями, все вычисления там, редьюсер просто вызывает на нужные экшены эту функцию
зачем здесь миддлвара?

Max
21.03.2017
15:31:24

Pavel
21.03.2017
15:31:33