@react_js

Страница 2409 из 5115
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 используешь?

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.

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
экшоны - это какое-то абстрактное действие, которое как-то меняет стор (или не меняет). Один экшон может менять стор во многих местах. Причем можно совсем в левом редьюсере подписаться на чужой экшон

Страница 2409 из 5115