
Oleg ?
08.07.2017
07:29:29
Это число постоянно меняется

Andrey
08.07.2017
07:29:51
В локальный стейт. Это немного сложнее реализовать, но он надёжнее.
По сути тебе надо будет сделать редакс для локального стейта.

Oleg ?
08.07.2017
07:30:34
А, что если это число понадобится чуть позже отображать в двух местах?

Google

Andrey
08.07.2017
07:31:52
Ну, у меня обычно для запросов есть библиотечка, которой передаёшь колбеки для каждого события. Ты можешь передать методу 2 колбека, которые будут изменять локальный стейт.

Oleg ?
08.07.2017
07:32:48
Может в кейсе, где нужно отобразить число в двух местах, стоит уже хранить в редаксе?
Мне кажется так будет удобнее

Andrey
08.07.2017
07:34:16
Ну, я в редаксе храню реально глобальные вещи. Это инстансы библиотек и локализацию.
Просто если есть возможность хранить данные локально, то лучше их хранить локально, имхо.
Гемороя меньше будет.

Oleg ?
08.07.2017
07:35:58
Как я понял из вчерашней беседы, если кейсы сложные, типо в двух и более местах, то лучше делать через редакс

shadowjack
08.07.2017
07:36:14

Andrey
08.07.2017
07:37:12

kana
08.07.2017
07:38:02
Да дело даже не в сложности кейсов. Ты же сам должен понимать, какие данные application-wide, а какие component-wide

shadowjack
08.07.2017
07:38:24
combineReducers для того и нужен чтоб глобальную дуру разобрать на кусочки

kana
08.07.2017
07:39:38
Вот скажем виджет, который показывает курс валют A -> B в банковском приложении. По кнопке он меняет на B -> A. Из стора он вытягивает сам курс, а вот направление - данные не приложения, его нужно хранить локально

Andrey
08.07.2017
07:39:58

Google

Andrey
08.07.2017
07:40:45
Как ты писал полные пути в состоянии: a.b.c.d.e, так и пишешь, как использовал глобальные имена type, так и используешь.

Dmitry ?
08.07.2017
07:43:03

anoru
08.07.2017
07:43:29

Andrey
08.07.2017
07:44:10

shadowjack
08.07.2017
07:44:21
Я думаю что redux нужно использовать везде, где это не приводит к проблемам с производительностью

Andrey
08.07.2017
07:45:45
Ну, если его использовать везде, то там начинается ад с диспатчами.

shadowjack
08.07.2017
07:46:08
Какой ад?

Andrey
08.07.2017
07:46:35
Ну, "везде" - это локальное состояние тоже хранить в редаксе?

Oleg ?
08.07.2017
07:47:00

shadowjack
08.07.2017
07:47:31

anoru
08.07.2017
07:47:43

Oleg ?
08.07.2017
07:47:43
Я просто видел проект где для всех данных пришедших с сервера используется редакс
Могу скинуть
github: opendota ui

anoru
08.07.2017
07:48:07
а почему бы не делать так?

Andrey
08.07.2017
07:48:56
Просто у меня в голове так: в редаксе нужно хранить данные, которые
1) затрагивают больше, чем 1 компонент
2) если изменение и чтение данных происходит в разных компонентах.

Oleg ?
08.07.2017
07:49:07
Ну иногда это слишком, для случаев когда данные используются в одном месте и отрисовываются они один раз

Andrey
08.07.2017
07:49:08
В остальных случаях я использую локальный стейт.
А работу с сервером лучше вынести в отдельную библиотеку и там с этим мучаться.

Google

anoru
08.07.2017
07:49:43

Andrey
08.07.2017
07:49:58

Oleg ?
08.07.2017
07:50:02
И я хз, как его убедить или лучше согласиться с ним...

Andrey
08.07.2017
07:50:25
У меня есть LibsReducer, в котором я просто создаю инстансы библиотек.
Такой DI для бедных.

Oleg ?
08.07.2017
07:51:14
Типо паттерн Фабрика?

Andrey
08.07.2017
07:51:30

Dmitry ?
08.07.2017
07:52:09

anoru
08.07.2017
07:52:29
Внешняя библиотека.
Да какая разница. То есть в компоненте A ты фетчишь вызывая экшен redux'а, а в компоненте B фетчишь прямо в didMount
А потом внезапно нужны данные компонента B в другом месте и ты переписываешь его как компонент A.

anoru
08.07.2017
07:52:52
Тебе не кажется, что проще сразу сделать в едином стиле?

Andrey
08.07.2017
07:53:16
Зачем?
Чтобы везде использовать одну копию библиотеки.

anoru
08.07.2017
07:53:19
отредактировал*

Andrey
08.07.2017
07:53:46
Ну, если понадобится внезапно, то можно после решить что делать.

Dmitry ?
08.07.2017
07:54:00

Andrey
08.07.2017
07:54:13
А решать сразу общую задачу - ну, это бесмысленно.

anoru
08.07.2017
07:54:27
А так будет каша из двух разных подходов в проекте

Google

anoru
08.07.2017
07:54:34
Я за "единый стиль"

Oleg ?
08.07.2017
07:54:45

shadowjack
08.07.2017
07:54:57

Dmitry ?
08.07.2017
07:54:59

anoru
08.07.2017
07:55:09
Тем более с крутыми мидлварами даже быстрее и проще выйдет

Andrey
08.07.2017
07:55:10

Oleg ?
08.07.2017
07:55:12
Но вряд-ли я смогу убедить второго разработчика

shadowjack
08.07.2017
07:55:45

Andrey
08.07.2017
07:55:54

Admin
ERROR: S client not available

Dmitry ?
08.07.2017
07:56:06
reducer - чистая функция, в которой не должно быть сайдэффектов. Делая там вещи типа "инициализация библиотек" ты это нарушаешь

Леонид
08.07.2017
07:56:40

Дмитрий
08.07.2017
07:57:42

anoru
08.07.2017
07:57:44
С редаксом я могу получить в редюсере данные, которые запрашиваю с сервера (или отсылаю) заранее для оптимистичных данных, а потом автоматически вызовется FAILURE в случае ошибке, где достану предыдущие данные, которые также автоматически сохраняются. Это позволяет писать оптимистичные изменения парой строк кода

Dmitry ?
08.07.2017
07:58:07

Oleg ?
08.07.2017
07:58:23

Andrey
08.07.2017
07:58:27

anoru
08.07.2017
07:58:38
Какую логику?

Oleg ?
08.07.2017
07:59:28
А вчера меня закидали помидорами, когда я призывал использовать для пришедших данных с сервера редакс

Google

kana
08.07.2017
07:59:29
Хранить все в редаксе - тоже не абрамоугодно

anoru
08.07.2017
07:59:33
ты что-то путаешь. В редюсере только сохранение оптимистичных данных на REQUEST, заменя на SUCCESS данными с сервера (там же id прилетает настоящий) и откат на FAILURE, никакой логики нету
это еще позволяет в мидлваре отслеживать ошибки и выводить нотификацию

Andrey
08.07.2017
08:00:05

kana
08.07.2017
08:00:08
Ибо Абрамов говорил, что любой нормальный чел понимает, что есть данные приложения, а что есть данные компонента
И хранить все в редаксе - дибелизм
Это и перегрузка стора кучей хлама типа значения некого инпута в хрен пойми какой модалке, и куча диспатчей ненужных
Хочется редакс для компонента - есть же локальный редакс

Oleg ?
08.07.2017
08:02:08

kana
08.07.2017
08:02:23
Нет, recompose/withRedux

Andrey
08.07.2017
08:02:33
Ну вот, обеденное обсуждение. Аж приятно стало)

kana
08.07.2017
08:02:47
редакс - такая простая вещь, что реализовать его локально даже без рекомпоса - десяток строк

anoru
08.07.2017
08:03:30
Вполне возможно.
Вот смотри. Даже если не затрагивать оптимистичное изменение, а просто фетч данных, которые нужны тебе в одном месте. Тебе пришлось бы делать запрос в didMount, потом обрабатывать ошибку, далее выводить нотификацию экшеном, который еще надо прокинуть в твой компонент. А можно просто в мидлваре отслеживать ошибку с сервера. Если сервер выдал еще и тип ошибки, то можно сразу взять текст из локали по этому типу и вывести нотификацию в виде попапа в углу экрана, который улетает. Такой подход позволяет делать вывод ошибок в любом месте с минимум затрат сил

Oleg ?
08.07.2017
08:03:59

Andrey
08.07.2017
08:04:14
У меня немного по другому. В библиотеку прокидывается колбек "что делать, если возникла ошибка". Туда я могу запихнуть всё что угодно.

Oleg ?
08.07.2017
08:06:22

Andrey
08.07.2017
08:06:22
Хоть алерт, хоть console.log, хоть сигнал редаксу.

kana
08.07.2017
08:06:53
recompose/withReducer.js at master · acdlite/recompose
https://github.com/acdlite/recompose/blob/master/src/packages/recompose/withReducer.js
А, пример прямо в ридми
https://github.com/acdlite/recompose/blob/master/README.md#lift-state-into-functional-wrappers

Oleg ?
08.07.2017
08:08:16
Ага, спасибо

Pavel
08.07.2017
08:17:41