
kana
25.10.2017
18:00:02

Artyom
25.10.2017
18:00:29
☹️

kana
25.10.2017
18:00:58
а, стоп, я смотрел на assignAll, мне он не нравится
а что делает твой модуль я пока не понял

Google

Artyom
25.10.2017
18:01:12
SSR используешь?

Dmitry
25.10.2017
18:01:20

kana
25.10.2017
18:01:29
нет, мне он просто не нравится, экшонКреаторы на то и экшонКреаторы, что чистые
а у тебя это сайд-эффект

Dmitry
25.10.2017
18:01:57
Ты про мой или про артема ?

kana
25.10.2017
18:02:15
я как почти профессиональный хаскелист (в смысле работу на нем нашел, и приняли, но еще не писал ничего и не скоро буду), против сайдэффектов)
про Артема

Artyom
25.10.2017
18:02:32
Так а как еще делать сайд эффекты >_>

kana
25.10.2017
18:03:02
в занках. ассинхронный экшон-креатор с занками не делает сайд-эффекта, если что

Artyom
25.10.2017
18:03:39
Вот сейчас не понял. Мои createAsyncAction работают практически так же как санк

kana
25.10.2017
18:03:40
он создает объект (функцию), который его делает, то есть по сути описывает его, он все еще чистый

Artyom
25.10.2017
18:04:07
Глянь код, там 15 строчек или типа того

kana
25.10.2017
18:04:21
так нет, вызов экшон-креатора сразу делает диспатч, то есть сайд-эффект. А экшон-креатор не должен делать эффект, это лучше делать одной функцией - диспатчем

Google

Dmitry
25.10.2017
18:05:09
у меня в начале тоже так было assignAll(actions, store);
но потом я от этого отказался
И потом даже от своей мидлвары отказался)

kana
25.10.2017
18:06:03
лучшим решением для всего этого (в том числе я для тестирования) я нашел саги, саги абсолютно чистые
но я не хочу их поддерживать в проекте на кучу людей, где многие на все это плевать хотели

Dmitry
25.10.2017
18:07:01

Artyom
25.10.2017
18:07:03
Я не понял, что у меня не так

Dmitry
25.10.2017
18:07:26
и для каждого прописвывать сагу это было б помереть можно б былоо
а еще типы

kana
25.10.2017
18:07:53
Я не понял, что у меня не так
экшон-креатор по задумке - чистая функция, она не делает сайд-эффект, она только описывает его, для этого есть диспатч. Твой же делает

Artyom
25.10.2017
18:07:56
Экшн через createAsyncAction выстреливает как обычный, просто по дороге уходит асинхронная функция в свободное плавание
Мой не делает
У меня этим мидлвара занята)
Или я не понимаю, опять же

Dmitry
25.10.2017
18:08:55

kana
25.10.2017
18:11:16
немного не понял, он типа сам делает isFetcing?

Dmitry
25.10.2017
18:11:27
я обьявляю екшоны вот так и потом возвращаю обернутые другой функцией екшоны
которая резолвит их если это промис и добавляет на промис функцию cancel еще

Google

Dmitry
25.10.2017
18:13:16
по сути это санк в котором вызываются нужные екшоны для промиса
busy, success, cance, loading
еще не придумал как лучше сделать с мета параметрами

Alex
25.10.2017
18:15:24
покажи пирмер экшона, не совсем понимаю что происходит

Dmitry
25.10.2017
18:15:50
on - хендлит только success екшона auth, т.е когда auth зарезолвится, то туда пойдет пейлоад
если интересно, то могу оформить нормально https://github.com/zhDmitry/rrethunk
вообще идея и половина кода отсюдова сворована https://github.com/wellguimaraes/actionware
но мне не понравилась идея что там надо делать setStore(store)
И что экшоны это не совсем екшоны, а какие-то особенные функций которые не санк и не что-то еще

Alex
25.10.2017
18:22:22
т.е. createReducer({}).on(actions.fetchData, (state, payload)=>{возвращает изменение стейта, вызывается при успешном экшене?}
правильно я понял?

Dmitry
25.10.2017
18:22:37
да

kana
25.10.2017
18:25:06
Твой идентити нифига не идентити)
Это K*-комбинатор

Alex
25.10.2017
18:33:52
у меня идея такая action => dispatch((state)=>({...state}))
вызывается экшон, в котором содержится логика, та же асинхронная операция, экшон диспатчик универсальный экшон который содержит чистую функцию изменяющую стейт, по сути это выглядит как
action(args);
стейт изменился. По сути у меня вместо редьюсеров обрабатывающих экшены - экшены редьюсеры. Ограничений нет никаких, полная совместимость с redux.

Stepan
25.10.2017
18:34:49

Alex
25.10.2017
18:36:02
на пример? полное логирование и возможность отправлять снапы экшенов

Google

Dmitry
25.10.2017
18:36:46
Ты немного совместил концепции которые не надо совмещать

Alex
25.10.2017
18:36:54
если у меня возникнет проблема, я могу добавить индентификатор к каждому экшену и прологировать что пришлоо и что ушло
да я понимаю, не понимаю почему это плохо

Dmitry
25.10.2017
18:37:04
Есть асинхронный екшин, а есть парсер который меняет данные
Потому что ты в одно место пихаешь разную логику
Например зачем тебе в екшоне делать ({…state, …newState})
это должен делать редюсер, а не асинхронный екшон
или например у тебя на один асинхронный екшин подвязаны два редюсера
Один смотрит на данные, а второй на статус с которым зарезолвился екшон

Alex
25.10.2017
18:39:38
всё что я делаю в экшоне это применяю изменения к снапу стейта по результатам логики

Dmitry
25.10.2017
18:40:50
У тебя в одном месте сошлить три разных действия
это нерпавильно
Сам апи запрос, парсинг данных и бизнес логика

Alex
25.10.2017
18:41:21
почему? чем это плохо

Dmitry
25.10.2017
18:41:48
Буковка S в слове Solid не зря есть
The Single Responsibility Principle
И это не только к классам применимо
Любой метод должен делать одно действие и не больше

Alex
25.10.2017
18:43:52
т.е. в экшоне у меня, как минимум, не должно быть апи запроса?

Google

Dmitry
25.10.2017
18:44:34
Я вот так это организовал
конечно не все правильно сделано
но из-за того что в екшинах бизнес логика, оно не нагромождается

Alex
25.10.2017
18:45:17
а, т.е. мне лучше сделать отдельный файл или структуру в которой будут собраны методы работы с api?

Dmitry
25.10.2017
18:45:36
Мне кажется, что да

kana
25.10.2017
18:45:40
S лучше понимать как "единственная причина для редактирования"

Dmitry
25.10.2017
18:46:07

kana
25.10.2017
18:46:19
то есть "этот компонент/функцию/класс нужно редактировать только если нужно поменять верстку, а этот только если логику"

Alex
25.10.2017
18:47:01
про api очень полезно сейчас было, даже не задумывался, потому что не дошёл ещё

Dmitry
25.10.2017
18:47:34

kana
25.10.2017
18:48:45
я только сейчас узнал, что thunk позволяет пропихивать что-то внутрь себя
типа третим аргументом

Alex
25.10.2017
18:48:56

kana
25.10.2017
18:49:09
если делать все эффекты ТОЛЬКО в экшонах, то это вполне себе мини-DI, туда нужно весь api кидать

Dmitry
25.10.2017
18:49:43
в третий аргумент закинул обьект который возвращает мне всякие полезности или токен или квери парамсы или просто утиль функции для которых надо контекст

kana
25.10.2017
18:50:31
экшоны - это какое-то абстрактное действие, которое как-то меняет стор (или не меняет). Один экшон может менять стор во многих местах. Причем можно совсем в левом редьюсере подписаться на чужой экшон