Egor
"Я редукс использую только для отправки/фетча" - шта?
Egor
для этого надо saga юзать или thunk на худой конец
Egor
точнее надо выражаться =)
Egor
если у вас есть кнопка, то она не должна ограничивать время, когда ее можно нажимать
Egor
это side effect какой-то
Egor
у нее должно быть в props свойство enabled
Egor
и уж откуда оно приходит и сколько времени должно быть on/off - не кнопки это дело
Egor
поэтому в контексте redux это on/off должно быть в store
Egor
все визуальные компоненты должны быть stateless где только можно
Egor
напротив: дебажить внутренние state десятка компонентов - это ж адок
Egor
=)
Egor
https://www.youtube.com/watch?v=3aKXZh0IgW4
Egor
упорство - хорошая вещь, но если уж взяли redux - зачем эти половинчатые решения?
Egor
я даже могу привести случай когда ваш подход на 100% завалится
Egor
например, на экране список, который можно обновить через pull-to-refresh а можно кнопкой Reload в навбаре и если юзер сначала дернет обновление скроллом, а потом нажмет Reload - вызовется один action который уронит приложение (почему-то?)
Egor
а если вы в store положите флаг что нельзя reload action вызывать - всё будет ок
Egor
и оба компонента: и кнопка, и список - будут знать что не надо вызывать действие
Egor
как по мне, в оригинальном вопросе уже содержится ответ: сделайте так, чтобы не падало приложение от многократного вызывания action
Egor
На крайняк уж просто проверить через тот же флаг в state что уже грузятся данные const reloadAction = (dispatch, getState) => { if (!getState().substate.isLoading) { fetch... .then(result => dispatch(loadingDone(result))) ... } }
Egor
вот это вообще правильно
Egor
а в thunk просто диспатчить сложносоставные actions
Egor
состоящие из элементарных actions =)
Alex
состоящие из элементарных actions =)
после какого то экшина вызывать еще какие то ?
Egor
// Thunk Actions export const onStart = (user: User, item: Item): ThunkAction => (dispatch: Dispatch) => { dispatch(setItemStarted(item, true)) dispatch(onLoadItemPackage(user, item)) }
Alex
это можно и в сагах же делать
Egor
соответственно setItemStarted и другие - либо совсем простые либо такие же сложные
Egor
можно, но я пока решил в сагах именно side effects обрабатывать
Egor
хотя там тоже приходится put и прочее делать, что по сути тот же dispatch...
Egor
ну такое в общем
Egor
но там можно делать допустим лишь один put(action...) который как раз уже будет результат от работы с внешним миром передавать в thunk
Andrey
жесть
Andrey
зачем все усложнять ?
Egor
не мы такие, жизнь такая
Egor
как проще?
Andrey
что-то одно использовать
Egor
тут как раз проще пока что получается, я начинал с чистого redux, потом взял redux-thunk, потом дошел до redux-saga
Egor
эволюционировал =)
Egor
я не отрицаю, что можно что-то одно, но у меня пока так сложилось
Andrey
Так а зачем тебе 2 инструмента решающих одну и ту же задачу ?
Egor
говорю же, я сейчас четко разделяю: в сагах у меня работа с side effects (api, device, и т.п. что не относится к внутреннему состоянию приложения и меняется не из-за ввода пользователя), а где логика изменения состояния приложения
Egor
можно убрать thunk и всё на сагах сделать
Egor
вот, сколько людей, столько мнений
Egor
почему?
Владимир
Потому что можешь делать, как хочешь, все равно работать будет
Владимир
Если руки прямые. И не будет - если кривые
Egor
я выше описал
Egor
а как же это?
Egor
сначала одно спросили а теперь всё не так выходит
Egor
вот и поговорили
Egor
вы сами начали с вопроса "как заблокировать кнопку чтобы приложение не упало от того что ее много раз нажимают"
Egor
считаю просто что redux в RN приложении must have поэтому вся дискуссия свелась в этот контекст
Egor
тут нет простора для мнения - если вы пишите приложение и в нем используется redux - то всё должно быть в redux, это его суть и только тогда от него есть реальная польза
Anonymous
https://t.me/uxgifs
Egor
просто чтоб не быть голословным, если кто не в курсе https://en.wikipedia.org/wiki/Single_source_of_truth
Владимир
SSOT не имеет отношения к разделению ответственности между стейтом и редуксом
Владимир
этот принцип говорит, что у каждого значения модели должно быть одно место, где оно определяется и лежит
Владимир
но не говорит о том. что все эти значения должны быть в одном месте, грубо говоря
Владимир
то есть если признак открытого дропдауна лежит в стейте, то он должен лежать только в стейте
Владимир
SSOT нарушается, если мы кладем что-то И в стейт, И в редукс
Владимир
или например держим одно и то же значение в разных полях стора
Egor
воля ваша
Egor
это хорошо, когда к internal state компонента можно пробиться извне или оно никому не нужно, но по мере развития приложения и усложнения его логики предпочтительнее хранить всё в redux
Владимир
предпочтительнее => я предпочитаю и будет классно сказано:)
Vit
вот в кассу вам
Vit
что предпочтительнее (что предпочитаете)
Vit
передать параметры экрану через props.state навигатора или через редакс?)
Vit
ну допустим айдишник выбранной записи для детэйлс-экрана?
Aleksei
считаю просто что redux в RN приложении must have поэтому вся дискуссия свелась в этот контекст
позволю не согласится 🙂не все на js пишут RN приложения 😉да и в js необязательно
Alex
первое, ибо в этом кейсе проще)
так же делаю, пробовал через редакс и пару раз наблюдал небольше лаги при транзишине
Aleksei
в принципе можно конечно, если навигейшеном управлять через редакс, тогда не будет лагов