
Кирилл
11.08.2017
09:52:18
просто мне рил интересно, я ж могу ошибаться, мб ваш подход лучше
но все равно непонтно как обернутый компонент в с определенными пропсами может быть универсально переиспользован

Алексей
11.08.2017
09:53:31
на самом деле этот способ даже более переиспользуемый. например у меня есть такой законнекченный компонент регистрации (все полностью инкапсулировано) и я могу вставлять его куда угодно, и не надо думать о том что мне надо пробросить какие то пропсы туда, экшены и прочую лабуду

Кирилл
11.08.2017
09:54:44
а

Google

Кирилл
11.08.2017
09:54:47
я походу понял
вы mapStateToProps делаете динамический подброс подстейтов?

Алексей
11.08.2017
09:55:51
и на самом деле сам компонент регистрации тоже знает только что есть какие то инпуты которые надо нарисовать и не знает что им надо какие то пропсы пробрасывать, всего лишь отображает их

Кирилл
11.08.2017
09:58:44
я понял, но чет я все таки для себя думаю мне удобнее такие данные держать в стейте. А не городить кучу редюсеров, типов, экшенов, сложных стейтов. Я редукс использую только для отправки/фетча, имхо такое разделение датафлоу понятятнее

Алексей
11.08.2017
09:59:21
вообще когда я первый раз услышал про то как делать таким способом мне сначала тоже не понравилась идея, но потом распробовал ?

Кирилл
11.08.2017
10:00:41
извиняюсь если резко, но мне кажется это попытка ипользовать модную технологию ради ее использования, а не ради удобства, сокращение времени, эффективности

Maria
11.08.2017
10:02:37
а мы пользуемся storybook и там не отобразить компоненты с коннектами (ну или я еще не знаю как)

Алексей
11.08.2017
10:02:57
это application level, а не отдельные компоненты

Maria
11.08.2017
10:03:33
ну вот мне надо там целый экран отобразить, а там по сути в экране куча компонентов у которых куча коннектов

Алексей
11.08.2017
10:04:07
хм, может я конечно что то не понимаю, но зачем в storybook целый экран делать

Maria
11.08.2017
10:04:39
чтобы дизайнер видел, как экран в целом будет выглядеть

Google

Алексей
11.08.2017
10:05:37
нуууу ооок)))
можно сделать так чтобы в сторибуке connect был фейковый)
хотя я конечно им не пользуюсь)

morda
11.08.2017
10:08:44
ну пропсы в коннекте подготовить это ж пол-дела, а экшоны для их изменения?) каждый переиспользуемый раз новые экшоны?)

Алексей
11.08.2017
10:09:01

morda
11.08.2017
10:09:10
ну вон в контексте кнопки
две кнопки - два экшэна
три кнопки - три
если кнопка свой стейт в редаксе хранит

Алексей
11.08.2017
10:09:39
пока логично говоришь ?
а есть какие то другие варианты?

morda
11.08.2017
10:10:28
я в таких случаях делаю пропс name="asfasfds"
и фигачу экшоны changeState(name, value) ))

Алексей
11.08.2017
10:11:13
а, ну дык пожалуйста, я тоже так делаю)
язык то динамический, верти как хочешь)

morda
11.08.2017
10:12:22
ну это для тех случаев когда кнопку "отжать" могут по результатам запроса в апи)
а если стей дальше компонента не уходит - то setState конечно)

Алексей
11.08.2017
10:14:28
ну у меня setState, гораздо реже, а то по опыту, придет ПМ и скажет "а вот сделай еще чтобы когда кнопка нажата, какая нибудь хрень внизу в самом исчезала"

morda
11.08.2017
10:14:59
рефакторинг - экстракт стэйта в редакс))

Алексей
11.08.2017
10:15:17

Google

morda
11.08.2017
10:15:35
ПМу по голове постучать еще можно)) чтоб не умничал часто))

Алексей
11.08.2017
10:15:48
ишь ты бунтарь)
делать надо так, чтобы легко изменять было)) в этом и есть любимый всеми баззворд - архитектура

morda
11.08.2017
10:16:42
постучать это так: тук-тук-тук АЛЁ У ВАС ВСЕ ДОМА?

Nikita
11.08.2017
10:22:34

Алексей
11.08.2017
10:24:23

Nikita
11.08.2017
10:24:57

Алексей
11.08.2017
10:25:16
субъективно)
не, звучит классно и солидно)
с таким перед начальством стыдно не будет))

Nikita
11.08.2017
10:27:13

Алексей
11.08.2017
10:28:15
;)
вот буду теперь на стендапах так говорить (когда на самом деле фигней маялся) ?

Nikita
11.08.2017
10:29:20
Главное не сделать сит даун ☺

Egor
11.08.2017
10:49:37
для этого надо saga юзать или thunk на худой конец

Кирилл
11.08.2017
10:50:02
тк у меня redux-thunk
а что не так?
+ persist

Egor
11.08.2017
10:50:45
точнее надо выражаться =)

Кирилл
11.08.2017
10:50:48
вот и «шта»

Google

Кирилл
11.08.2017
10:50:56
тк по сути это редукс же

Egor
11.08.2017
10:51:36
если у вас есть кнопка, то она не должна ограничивать время, когда ее можно нажимать
это side effect какой-то
у нее должно быть в props свойство enabled
и уж откуда оно приходит и сколько времени должно быть on/off - не кнопки это дело
поэтому в контексте redux это on/off должно быть в store
все визуальные компоненты должны быть stateless где только можно

Кирилл
11.08.2017
10:53:34
у меня нет, мне достаточно чтоб пользователь не нажал на нее повторно в ближайшую секунду и все

Egor
11.08.2017
10:53:38
напротив: дебажить внутренние state десятка компонентов - это ж адок

Кирилл
11.08.2017
10:53:55
а сам компонент от этого стейтлесом не перестанет быть

Egor
11.08.2017
10:54:12
=)
https://www.youtube.com/watch?v=3aKXZh0IgW4
упорство - хорошая вещь, но если уж взяли redux - зачем эти половинчатые решения?
я даже могу привести случай когда ваш подход на 100% завалится

Алексей
11.08.2017
10:57:46

Egor
11.08.2017
10:58:16
например, на экране список, который можно обновить через pull-to-refresh а можно кнопкой Reload в навбаре и если юзер сначала дернет обновление скроллом, а потом нажмет Reload - вызовется один action который уронит приложение (почему-то?)
а если вы в store положите флаг что нельзя reload action вызывать - всё будет ок
и оба компонента: и кнопка, и список - будут знать что не надо вызывать действие
как по мне, в оригинальном вопросе уже содержится ответ: сделайте так, чтобы не падало приложение от многократного вызывания action
На крайняк уж просто проверить через тот же флаг в state что уже грузятся данные
const reloadAction = (dispatch, getState) => {
if (!getState().substate.isLoading) {
fetch...
.then(result => dispatch(loadingDone(result)))
...
}
}

Google

Alex
11.08.2017
11:05:49

Egor
11.08.2017
11:06:07
вот это вообще правильно
а в thunk просто диспатчить сложносоставные actions

Alex
11.08.2017
11:09:02

Egor
11.08.2017
11:10:16
состоящие из элементарных actions =)

Alex
11.08.2017
11:11:05

Egor
11.08.2017
11:11:25
// Thunk Actions
export const onStart = (user: User, item: Item): ThunkAction =>
(dispatch: Dispatch) => {
dispatch(setItemStarted(item, true))
dispatch(onLoadItemPackage(user, item))
}

Alex
11.08.2017
11:11:46
это можно и в сагах же делать

Egor
11.08.2017
11:11:59
соответственно setItemStarted и другие - либо совсем простые либо такие же сложные
можно, но я пока решил в сагах именно side effects обрабатывать
хотя там тоже приходится put и прочее делать, что по сути тот же dispatch...
ну такое в общем

Alex
11.08.2017
11:13:21

Egor
11.08.2017
11:14:00
но там можно делать допустим лишь один put(action...) который как раз уже будет результат от работы с внешним миром передавать в thunk

Andrey
11.08.2017
11:14:11
жесть
зачем все усложнять ?

Egor
11.08.2017
11:14:35
не мы такие, жизнь такая
как проще?

Andrey
11.08.2017
11:15:38
что-то одно использовать

Egor
11.08.2017
11:15:54
тут как раз проще пока что получается, я начинал с чистого redux, потом взял redux-thunk, потом дошел до redux-saga
эволюционировал =)
я не отрицаю, что можно что-то одно, но у меня пока так сложилось