
Denis
06.05.2017
18:57:46

Сергей
06.05.2017
18:58:33
не вижу ничего плохого передавать экшены сверху
зачастую это единственное решение, чтобы избежать копипасту или многословность

Google

Евгений
06.05.2017
19:12:01
Давно так используете?
не сразу, но пришли к этому полгода назад как раз из-за удобства переиспользования и общей внятности большой code base
+ в этом real-world example не хватает redux-actions

Denis
06.05.2017
19:20:01
redux-act смотрели?
А как разделяете action ID?

Herman
06.05.2017
19:20:41
Ребят посоветуйте какой бойлерплейт на yeoman, чтобы был TypeScript, Sass-lib, и может какой BrowserSync

Evgeny
06.05.2017
19:20:51
Никакой

Denis
06.05.2017
19:20:53
UPDATE_USER_NAME? Или вида namespace user.updateName? Или что то ещё?

Evgeny
06.05.2017
19:20:54
Бойлерплейты не нужны

Denis
06.05.2017
19:21:06
)

Herman
06.05.2017
19:21:20

Евгений
06.05.2017
19:21:23
https://www.npmjs.com/package/redux-actions предпочел вместо react-act

Google

Evgeny
06.05.2017
19:21:23
Нет
Ты просто ещё не понял что они не нужны

Max
06.05.2017
19:21:34
++
bulma, purecss
Я бутстрап беру. У него бибилиотека виджетов самая полная. Но у меня говностартапы - дизайна нет

Herman
06.05.2017
19:21:59

Evgeny
06.05.2017
19:22:19
npm i —save-dev libsass …etc?

Denis
06.05.2017
19:23:03

Herman
06.05.2017
19:23:22
Всё, проехали. Выбесил

Denis
06.05.2017
19:24:45

Евгений
06.05.2017
19:27:21
одноуровневые UPDATE_USER_NAME, но с redux-actions выбор этой конвенции не играет особой роли

Denis
06.05.2017
19:30:28
Да, это понятно, но не было ли у вас проблем в итоге с тем, что action_id разростался совсем?
С точки зрения масштабирования вроде namespace-like выглядит более гибко. Оно прекрасно ложится на GraphQL и RESTful API:
createAction('session.user.profile.updateFirstName', value => validate(value, rules))
Что может вызвать POST /api/v1/session/user/profile или соответствующую мутацию для GraphQL.
Плюс сюда же можно версию API добавить легко (это может показать космосом, но представим себе большое Enterprise-решение).

Евгений
06.05.2017
19:31:58
согласен, но у нас rpc и это неактуально

Evgeny
06.05.2017
19:32:03
@denisizmaylov до какого числа на митап подавать доклад?

Ruslan
06.05.2017
19:32:27
а если абстрагироваться от генерирования посредством redux-action/redux-act, а рассматривать классический подход, то как вы храните/импортируете константы?
- экспортируете каждую константу отдельно
- экспортируете один объект с константами?

Denis
06.05.2017
19:32:41
31 мая митап / 21 мая прогон / 16 мая дедлайн по докладам

Evgeny
06.05.2017
19:32:48
Ок

Google

Евгений
06.05.2017
19:35:21

Denis
06.05.2017
19:36:48
Плюс tree shaking

Ruslan
06.05.2017
19:37:32
мне объект нравится тем, что не надо указывать необходимые константы в импорте, хотя можно конечно импортировать как import * as constants

Alex
06.05.2017
19:37:44

Евгений
06.05.2017
19:37:50
А где вы планируете митап провести ?

Alex
06.05.2017
19:38:14

Evgeny
06.05.2017
19:38:20
@DenisIzmaylov

Denis
06.05.2017
19:39:10
Но плюс всегда рады приглашениям на новые интересные большие площадки, способные принять 100-150 чел

Дмитрий
06.05.2017
19:40:58
чет в яндексе не хватило места)

Denis
06.05.2017
19:41:52
Так-то да) Не успели вовремя закрыть регу

Дмитрий
06.05.2017
19:42:09
а я не успел во вермя приехать и стоял в дверях :D

Denis
06.05.2017
19:42:14
И в зале на 90 человек пришлось укомпоноваться уютно 130-150 :)
Но можно было занять себе место "после антракта"))

Дмитрий
06.05.2017
19:42:55
так и сделал))
к счастью все любят поесть
;D

Denis
06.05.2017
19:43:19
На митапах это святое

Дмитрий
06.05.2017
19:45:30
?

Google

Сергей
06.05.2017
20:56:18
я тут экспериментирую с TouchBar + Electron
http://www.giphy.com/gifs/l0IyoP9cKGbye0mCk
https://gist.github.com/LestaD/69963787daf1dcad055cb9ac11292046
в React-стиле

Denis
06.05.2017
21:53:53
согласен, но у нас rpc и это неактуально
Резюмируя, относительно обсуждения, текущие рекомендации для крупных 3R-проектов:
1. Использовать redux-actions / redux-act, отказавшись от констант для action ID
2. Именовать action ID в формате namespace-нотации вида session.user.profile.updateFirstName
3. Вынести весь state из компонентов приложения в Redux Store, оставив state только для универсальных UI-компонентов / TODO: есть ли проблемы с производительностью в этом случае?
4. Обработчики событий определять через ES Class Properties
Что упущено?
/сс @evgenyrodionov @imrajdee @ZeroBias @syabro @fjfalcon @ppavle @klimashkin @gaearon

Evgeny
06.05.2017
21:54:47
Даня тут?

Denis
06.05.2017
21:55:01
О, кстати, вышел. Но это понятно, ему надо на английском языке сосредоточиться.

Дмитрий
06.05.2017
21:56:00
В твиттере аудитория больше)

Admin
ERROR: S client not available

Evgeny
06.05.2017
21:56:42
1) да
2) на любителя, у меня @@cem/newsletters/load/list/started или что-то типа этого
3) да
4) в чём смысл?

Дмитрий
06.05.2017
21:57:29
4 — чтобы не биндить

Evgeny
06.05.2017
22:00:06
Нейминг конвеншнс и другие стандарты.
Сегодня на курсе зарубались с одним человеком, у которого стиль кода отличается от моего.
Мой — общепринятый, потому что у меня была команда и единственный разумный стайлгайд это тот, которого придерживается большинство в коммьюнити. Стиль кода сродни художественному — все похуй на ваш авторский взгляд, главное — читаемость. В джс это стандарт от Эйрбнб, в CSS/HTML — от mdo, автора Бутстрапа.
Но, конечно, вручную это проверять — ад (Кофемания зовёт, зачем тратить время и ебать друг другу голову за буквы?), поэтому в нормальных проектах есть eslint и stylelint, а в самых охуенных — prettier, я о нём уже говорил.

Max
06.05.2017
22:01:33
3. Нет
Стараюсь не использовать redux если без этого можно обойтись

Дмитрий
06.05.2017
22:02:20
Нейминг конвеншнс и другие стандарты.
Сегодня на курсе зарубались с одним человеком, у которого стиль кода отличается от моего.
Мой — общепринятый, потому что у меня была команда и единственный разумный стайлгайд это тот, которого придерживается большинство в коммьюнити. Стиль кода сродни художественному — все похуй на ваш авторский взгляд, главное — читаемость. В джс это стандарт от Эйрбнб, в CSS/HTML — от mdo, автора Бутстрапа.
Но, конечно, вручную это проверять — ад (Кофемания зовёт, зачем тратить время и ебать друг другу голову за буквы?), поэтому в нормальных проектах есть eslint и stylelint, а в самых охуенных — prettier, я о нём уже говорил.
Жду появления траста «Родионов и партнёры» ?

Max
06.05.2017
22:05:40

Сергей
06.05.2017
22:12:45

Denis
06.05.2017
22:14:42
Rodionov Rodionov Rodionov
Или React Redux Router
React Relay Router

Google

Denis
06.05.2017
22:16:01
React Redux Relay Router
Это уже другая была бы история

Evgeny
06.05.2017
22:19:54

Max
06.05.2017
22:33:39
Ы

Paul
06.05.2017
23:20:50

Denis
06.05.2017
23:23:29
Чтобы без this.handleClick = this.handleClick.bind(this) в конструкторе

Paul
06.05.2017
23:25:14
А в случае ssr это просто пустая трата ресурсов, создавать все обработчики на каждый инстанс. Да и на клиенте получается ты создаешь функции на каждый инстанс, вместо дешего байндинга
Так что байндить надо в конструкторе вручную и вырезать этот блок при сборке для ssr.
Это и есть best-practice

Denis
06.05.2017
23:26:56
Интересно
А ещё что-нибудь можно добавить?

Игорь
06.05.2017
23:41:19
Эй псс, есть кто?)

Дмитрий
06.05.2017
23:42:38
А потом удивляются, почему на собеседованиях простые вещи спрашивают)

Yumi
06.05.2017
23:44:23
С козырей зашёл. ?

Игорь
06.05.2017
23:45:42
Парни а как лучше сделать подгрузку данный? Пока додумался так: проходят все фильтры, и срабатывает функция которая по частям выводит массив. Текущая страница отмечается в стейте. componentDidMount вешаю document.addEventListener('scroll',this._someFunc). А в самой функции, той что выводит частями, при превышении количества страниц снимаю событие с докумена. Это норм, или есть лучше решение?

Denis
06.05.2017
23:48:25

Дмитрий
06.05.2017
23:49:21
> Так что байндить надо в конструкторе вручную
class SomeClass {
state = {
value: 0
}
handler = () => this.state.value++
}
Транспилируется в
class SomeClass {
constructor() {
this.state = {
value: 0
};
this.handler = () => this.state.value++;
}
}
Теперь всё то же самое но руками:
class SomeClassWithBind {
constructor() {
this.state = {
value: 0
};
this.handler = this.handler.bind(this)
}
handler() {
return this.state.value++;
}
}
Мы видимо про какой-то разный биндинг, потому что если вырезать биндинг, то handler будет терять контекст this вне зависимости от того, где исполняется код