@typescript_ru

Страница 450 из 669
Andrey
31.12.2017
12:21:28
А до осмысления?)

Igor
31.12.2017
12:21:38
а к фреймворку привязано?

Andrey
31.12.2017
12:21:58
Google
Вертихвост
31.12.2017
12:22:10
Я просто только присоединился к разговору)

Andrey
31.12.2017
12:22:14
Я примерно представил как оно работает. Однако только в реакте.

Есть хок, который регистрирует состояние в редакс и убирает за собой.

Дмитрий
31.12.2017
12:22:45
Это не столько идея (одна) сколько набор патчей к изначальной концепции) С учетом того что у нас сейчас всё типизировано

Вертихвост
31.12.2017
12:22:46
Можете рассказать или кинуть в меня сообщением?

Igor
31.12.2017
12:22:56
я представил без реакта

с реактом у меня тяжелая нелюбовь

Дмитрий
31.12.2017
12:23:12
Igor
31.12.2017
12:23:34
Andrey
31.12.2017
12:23:49
Нет, вообще не привязано к реакту изначально
Хм... Тогда я не могу понять как узнавать то, что тебе нужна та или иная секция в редакс.

andretshurotshka?❄️кде
31.12.2017
12:24:26
роутер

Дмитрий
31.12.2017
12:24:34
Ага

Igor
31.12.2017
12:24:36
декораторы

Google
Andrey
31.12.2017
12:24:36
роутер
Что роутер?

Дмитрий
31.12.2017
12:25:56
Короче исходим из принципа минимальной магии

andretshurotshka?❄️кде
31.12.2017
12:26:05
Что роутер?
Загружать редьюсер в зависимости от роута?

Andrey
31.12.2017
12:26:23
Загружать редьюсер в зависимости от роута?
Так ты только часть сценариев покрываешь.

У меня в приложении вообще роутов нет, к примеру.

Дмитрий
31.12.2017
12:26:36
Да, no silver bullet

У нас если быть точным грузится в зависимости от ачинхронно подгружаемого чанка, а не непосредственно роута

Andrey
31.12.2017
12:27:22
У меня в проекте есть похожая штука, которая, вроде как, покрывает полностью реакт, но я не уверен, что там пробоин нет.

Но там просто. Когда грузится компонент, то он обёрнут хоком, на котором в componentWillMount и componentWillUnmount добавляется редьюсер и прогоняется экшен инициализации.

А так - каждому нужно своё условие добавления-удаления редьюсера делать.

Дмитрий
31.12.2017
12:30:46
Удаления редьюсеров нет, это в дефолтном виде приносит только проблемы

Andrey
31.12.2017
12:32:05
Удаления редьюсеров нет, это в дефолтном виде приносит только проблемы
Да, я думаю сделать его ленивым, чтобы при следующем изменении в данной секции происходило нужное. Но я не придумал как это сделать.

Дмитрий
31.12.2017
12:36:28
Короче если схематично: Экшны руками создавать не требуется, так как есть createAction(description: string) Тип руками тоже не создаём, и не юзаем и вообще особо напрямую не используем То есть везде у нас есть в первую очередь данные, они отправляются в actionCreator и они же читаются редьюсерами Экшн типизируется не строками а данными которые они принимают при создании. Это ключевая точка, единственное место в коде где мы напрямую указываем, какие типы будем передавать



Andrey
31.12.2017
12:36:50
1 редьюсер на компонент? Оо
Не обязательно один.

Потому что ты n редьюсеров всегда можешь пред=вратить в один.

Дмитрий
31.12.2017
12:43:21
Далее на основе этих экшнов создаются редьюсеры. Я использую redux-act но фактически от него только обёртка осталась



Как можно заметить, все редюсеры без типов вообще

Google
Дмитрий
31.12.2017
12:43:58
Тем не менее полностью типизированные :)

Фича в том, что описав экшны на основе payload мы получаем возможность выводить тип сразу и их и редьюсеров

createReducer({} — это потому что в акте в первом аргументе reducer map, который нам больше не нужен. Во втором аргументе — defaults .on — это поочерёдное добавление экшнов, на которые будет реагировать данный редьюсер

andretshurotshka?❄️кде
31.12.2017
12:46:57
off)

Дмитрий
31.12.2017
12:46:57
В .on в первом аргументе как и везде в других местах передаётся экшн-креатор, который теперь сам по себе символизирует тип экшна

off)
Вот перепишу act, выпилю ваще ? Реально пока нет unload редьюсеров — он ни зачем вообще

Далее улучшения — скоупы

Andrey
31.12.2017
12:50:15
Блин, а это офигенная идея.

Сергей
31.12.2017
12:50:21
это в каком проекте?

Дмитрий
31.12.2017
12:50:46
это в каком проекте?
Пока в закрытом, скоро портирую в telegram-mtproto

Andrey
31.12.2017
12:51:17
Подключать редьюсеры при первом вызове экшена, хотя тогда не понятно, когда убирать лишние редьюсеры.

Дмитрий
31.12.2017
12:51:53
Никак, я вижу основания об этом пока не думать, так как там есть тесная связь с более глубокими концепциями)

Andrey
31.12.2017
12:52:24
Никак, я вижу основания об этом пока не думать, так как там есть тесная связь с более глубокими концепциями)
Да, просто я не вижу тогда смысла подключать динамически редьюсеры. Зачем это надо?

Дмитрий
31.12.2017
12:52:35
code splitting

Непосредственно связано со следующей вещью о которой я хочу рассказать)

Andrey
31.12.2017
12:53:24
code splitting
Я не думаю, что у меня и у тебя одинаковое понятие этой вещи. Что ты имеешь ввиду?

Andrey
31.12.2017
12:55:32
Ок, понял.

andretshurotshka?❄️кде
31.12.2017
12:55:39
то есть по роуту

Google
Andrey
31.12.2017
12:55:54
А без роутов никак?)

Дмитрий
31.12.2017
12:58:13
На самом деле это функция importReducer которую ты вызываешь перед тем как у тебя появляется код который использует данные редьюсеры

В нашем случае это роуты, потому что scope

Далее улучшения — скоупы
Обнаружив у себя кучу экшнов вида user/auth/logout, я сделал вывод, что скоупы уже существуют как факт и можно только сделать их объявление проще

import { actionScope } from 'Store' const authAction = actionScope('auth') const loginAction = authAction.childrenScope('login') const doLogin: Action<{ user: string, pass: string }> = loginAction('doLogin') В дев тулсах при этом будет экшн [xx] auth/login/doLogin то есть это чисто вопрос удобства

Дальнейшим шагом становится то, что стор можно положить рядом с кодом его использующим, как раз будет деление по скоупам (отдельно хочу отметить, что номинально скоупы — это просто строки текста и ни на что сами по себе не влиять не будут, чтобы не забивать голову проблемами)

То есть если мы делаем допустим страницу регистрации, то можем положить папку state прямо в директорию со страницей регистрации (подразумеваю, что используется атомик или просто что-либо кроме деления components/containers)

И грузить редьюсер по требованию, бонусом имеем экшны в шаговой доступности от компонентов и простоту рефакторинга — сразу понятно кто и где будет юзать эти экшны и эти данные в childReducer То есть получается такой сабстейт без проблем сабстейта так как у нас всё по прежнему — единый стор, но рабитый не физически а логически

Admin
ERROR: S client not available

Дмитрий
31.12.2017
13:12:01
Короче я чот подустал (это ещё не всё), кому там интересно было)

@iRbisaDm @thekiba

Igor
31.12.2017
13:14:45
Прости, я рублю оливье, пристану к тебе попозже

Вертихвост
31.12.2017
13:15:02
Понял. У нас похожим способом сделано за исключением того, что единого стора нет

Дмитрий
31.12.2017
13:15:16
Да я вот тоже понял что продолжать стоит числа так второго)

Igor
31.12.2017
13:35:13
ваше здоровье!

Ҫѐҏӗѫӑ
31.12.2017
16:55:00
накатим

Aleh
31.12.2017
16:57:01
еще вроде и рано, но почему бы и нет

накатим)

Mike
31.12.2017
17:06:05
Я еще в поезде. Сойду через пол часа, остальные поедут в новый год в вагоне. Четырех парней перебравших с водочкой уже сняли.

Andrew
31.12.2017
17:07:49
Сурово :)

Google
Mike
31.12.2017
17:08:12
В целом все мирно



Igor
31.12.2017
18:31:10
Накатим!

Сергей
31.12.2017
18:39:24
лол

Igor
31.12.2017
20:48:11
Вопрос не по теме. А кто как приваты делает недоступными в итоговой сборке?

Mike
31.12.2017
21:39:04
За типизацию!

Dmitry
31.12.2017
21:41:13
Боже, храни типизацию!

Сергей
31.12.2017
21:41:47
Igor
01.01.2018
18:13:25
Привет выжившим!

Alesia
01.01.2018
19:07:08


Mike
01.01.2018
20:00:17
доброе утро

Igor
01.01.2018
20:01:10
утро да, такое

Dmitrii
01.01.2018
22:07:11
Всем привет. Только начинаю вникать в ts, можно ли как-то заставить работать 3й случай? - https://clck.ru/CS7PU

andretshurotshka?❄️кде
01.01.2018
22:08:40
applyMods({ size: 's', theme: 'normal', });

Dmitrii
01.01.2018
22:11:21
да, это 1 случай

мне нужно 3й

Eugene
01.01.2018
22:13:54
as SomeProps

andretshurotshka?❄️кде
01.01.2018
22:15:14
as SomeProps
это тоже самое что и второй)

Dmitrii
01.01.2018
22:17:44
тут цель в том, чтобы один объект несколько раз использовать и сходу не врубился, почему тс считает несовместимыми типы

Vasiliy
01.01.2018
22:18:26
String enums как вариант

Страница 450 из 669