
Дмитрий
15.08.2016
21:37:18
Веб-версия просто написана на первом ангуляре, и как-то слегка кривовато
Я немного разбирал устройство, делал под веб-версию скрипт, чтобы при кике в чате автоматически логиниться обратно)

Ҫѐҏӗѫӑ
15.08.2016
21:41:36
http://formatjs.io/about/
реакт-интл на нем построен + messageformat наработки в нем же + поддерживает небезызваестная компания + сотрудники этой компании и мейнтейнеры — основные чуваки из tc39, которые занимаются ecma-402
поэтому мессаджформат.жс не нужен

Google

Алексей
15.08.2016
21:42:55

Ҫѐҏӗѫӑ
15.08.2016
21:46:28
btw react-intl тоже не нужен имхо
кор либ вполне достаточно
http://formatjs.io/github/#core
раньше с реакт-интл еще и проблемы были всякие
сейчас хз актуальны ли они, но осадочек остался

マイク
15.08.2016
21:50:40

Anton
16.08.2016
07:51:39
https://telegram.me/devops_ru

Grigory
16.08.2016
08:31:40
Коллеги, с draft.js кто-нибдуь работает?

Stanislav
16.08.2016
08:37:20
Ага

Anton
16.08.2016
08:48:43
А зачем?

Grigory
16.08.2016
08:50:58
Ага
Подскажи плиз, как из массива вида [ { text: ‘text1’ }, { text: ‘text2’} ] сформировать стейт едитора?

Nikita
16.08.2016
09:57:06
идея для eslint плагина - проверять все компоненты в проекте на уникальность названия. Есть такое? мб кто-то написать и тучу старов сорвать?)

Oleksandr
16.08.2016
10:10:46
но зачем?

Google

Alexey
16.08.2016
10:13:31
И правда зачем?

Nikita
16.08.2016
10:13:39
чтобы классы при использовании css-modules можно было так писать: Project[name]-[local]

Alexey
16.08.2016
10:13:46
Файловая система не решает эту задачу?

Nikita
16.08.2016
10:14:14
частично решает, но не полностью
иногда внутри компонента есть хелперы, хочется для них также уникальное название

Alexey
16.08.2016
10:15:19
Кажется на специфику проекта твоего похоже уже
Но кажется по простому можно на уровне шела решить

Nikita
16.08.2016
10:15:49
не только моего) посмотри на фейсбук, у них также
тут eslint исключительно потому что надо определять есть ли в файле react компонент)

Alexey
16.08.2016
10:16:22
Ок

Nikita
16.08.2016
10:17:16
ну и блин, это удобно) когда все компоненты точно имеют уникальные названия)

Alexey
16.08.2016
10:18:53
Да, я просто не сталкивался )
У нас все в одной папке лежит )

Nikita
16.08.2016
10:19:25
и еще вопрос про flux/redux. Я каждый раз по разному эту задачу решаю, как вы считаете, как правильно.
Есть список, есть форма-фильтр. Значения фильтра хранятся в сторе, где правильно debounce ставить на экшн, который с сервера тянет данные?

Vladimir
16.08.2016
10:20:22
в компоненте

Sergey
16.08.2016
10:21:27
почему не в экшн креаторе?

Nikita
16.08.2016
10:21:33
и компонент дергает 2 экшна?
или в connect будет норм такой экшн подсунуть?

Dmitry
16.08.2016
10:23:21

Nikita
16.08.2016
10:23:58
также можно сказать и про компонент. Компонент тоже хочется, чтобы был максимально тупым

Google

Vladimir
16.08.2016
10:24:00
и компонент дергает два экшна, да

Dmitry
16.08.2016
10:24:35
Так наличие debounce не делает компонент умнее ) А вот экшен становится сложнее

Nikita
16.08.2016
10:24:46
а в connect не ок решать? Допустим будет onLoad, onLoadMore и onReload = debounce(onLoad)?
ибо в противном случае внутри конструктора компонента идет магия с _.debounce, и по вашему это ок?

Dmitry
16.08.2016
10:27:06
Можно и в классе сразу:
class A {
…
handleLoad = _.debounce(options => this.props.onLoadMore(options));
…
render() {}
}

Nikita
16.08.2016
10:28:11
вот кстати второй вопрос) передавать filter в экшн, или брать из стора?

Dmitry
16.08.2016
10:28:34
Из стора
Если он там хранится изначально

Nikita
16.08.2016
10:29:12
> Экшен должен быть максимально тупым
Это твои слова. Знание экшна о сторе не усложняет его?

Dmitry
16.08.2016
10:32:22
Ну тогда наверно это можно назвать делом вкуса )
Объясню. Если я делаю фильтр в сторе, я изначально закладываю идею изменения фильтра многими другими экшенами. Тогда, чтобы не гемороиться с интерфейсом, я просто буду вынимать все из стора. Все равно у меня там thunk и он прокидывает мне getState. Но если я хочу изменять фильтр только в одном месте, то я не храню фильтр в сторе, и тогда да, надо передавать его как параметры функции

Nikita
16.08.2016
10:33:55
да, это понятно) вообще такие вопросы - это вопрос про личный опыт и набитые шишки. Но ок, тогда так и буду делать)

Dmitry
16.08.2016
10:39:08
Туда же - фильтр может быть сложным объектом. Один из рычагов меняет в нем только одно поле. Тогда чтобы перезапросить данные способом с передачей фильтра как параметра функции, мне придется подписаться в компоненте на изменение стора фильтра. В случае с выниманием фильтра из стора в экшене подписываться вообще не обязательно. И компонент становится тупее, что нам и нужно. Просто по мне так тупой компонент важнее тупого экшена ) Пусть уж лучше обращение к стору будет в экшене

Vladimir
16.08.2016
10:49:02
я из стора беру, потому что так быстрее тупо

Anton
16.08.2016
11:44:52

Антон
16.08.2016
12:02:16
Парни, кто как использует let и const? Я всегда юзаю const где не перезаписываю переменную. Некоторые принципиально не используют const для объектов. Хочу знать мнение сообщества.

Роман
16.08.2016
12:03:30

Vadim
16.08.2016
12:03:43
const не сделает объект иммутабельным
наверное поэтому и не используют для объектов

Kich
16.08.2016
12:04:24
хотя логически всё верно. Ведь в переменной хранится только ссылка

Google

Антон
16.08.2016
12:22:58
Посмотрел 10-15 популярных репо на гитхабе, везде юзают const, let только когда перезаписываем переменную.

Anton
16.08.2016
12:34:49
В Rust например по умолчанию все 'переменные' немутабельные, и там нужно дополнительно указывать, что ты можешь менять их значение
Такой подход выглядит разумным
В мире Java тоже считается хорошим тоном у свойств/методов объектов указывать final всегда
Так что это считается хорошей практикой не только в JS

Sergey
16.08.2016
12:45:11

Admin
ERROR: S client not available

Sergey
16.08.2016
12:45:35
ноп.
чувакк говорит не о методах а о филдах

Sergey
16.08.2016
12:47:14
Final у аргументов методов всего лишь означает, что нельзя в теле метод создать локальную переменную с таким же именем.

Ilya
16.08.2016
12:47:40
поехавшие

Anton
16.08.2016
12:48:46
Ну я не большой специалист в Java, знаю лишь, что final запрещает переопределять методы/менять свойства/переменные

Ilya
16.08.2016
12:49:11
так и есть

Sergey
16.08.2016
12:54:17
Ну да, во всех хороших книгах по Джаве рекомендуют делать поля и перменные final.
Только это лукавство - на одних final ничего не напишешь, ибо нужно как-то моделировать изменение реального мира в своей программе.
И к тому же final делает иммутабельную ссылку, но если она ссылается на объект или коллекцию, то они по-прежнему мутабельны.
Правльное решение - это мутабельные ссылки (с чёткой concurrency сематникой) на иммутабельные объекты/коллекции.
В Джаве пока нет нормальных иммутабельных коллекций, только copy-on-write.
И из ссылок с чёткой семантикой есть тольк AtomicReference
А вот в Clojure есть и хорошие иммутабельные коллекции и несколько типов ссылок (var, atom, agent, ref)

Anton
16.08.2016
12:56:31
Ну точно по этой же причине я и не везде пишу const, а иногда использую let. Хотя в js кончено можно и на одних const'ах уехать

Dmitry
16.08.2016
13:13:48

Nikita
16.08.2016
14:06:29

Google

Alexey
16.08.2016
14:08:45
я кстати так тоже и не нашел пользы от let кроме как решать задачку на замыкание более элегантно на собеседованиях

Nikita
16.08.2016
14:09:42
ну, кто код нормальный пишет, а не лапшу, да еще и линтерами пользуется, от const/let ни холодно ни жарко.

Alexander
16.08.2016
14:14:58
А серьезно какой профит от let и const это же все равно в var трансплитится.

Dmitry
16.08.2016
14:16:05
Я let использую по назначению, с каким она задумывалась, и просто привык уже ) Например в редьюсерах
const reducer = (state = initialState, action) => {
if (action.type === SOME_TYPE) {
let list = action.payload.map(() => {});
return {
...state,
list,
listById: keyBy(list, 'id')
};
}
return state;
}
Мне просто совесть не позволяет написать var не в начале функции ) И таких конструкций может быть много, а засорять редьюсер объявлением всех вспомогательных переменных в начале функции совсем не хочется при этом. Пусть в итоге все в var транспилится, зато мой код красивый )

Anton
16.08.2016
14:17:54
Ну и холиварное замечание - мы же не пишем байткод, хотя js все равно в него компилится

Alexander
16.08.2016
14:19:32
=)

Sergey
16.08.2016
14:19:34
Можно предположить что в перспективе jit сможет оптимизировать код понимая что тип у const не изменится. также конст удобна прежде для самого разработчика - видно что ссылка\значение больше не изменится.

Alexander
16.08.2016
14:21:34
Просто замечание про "нормальный код" несколько резковатое, мне показалось. "Нормальный код" может быть достаточно личным понятием и +- отличаться.

Igor
16.08.2016
14:21:52
профит в том что let и var работают по-разному

anoru
16.08.2016
14:22:17
словно в projs зашел)

Ҫѐҏӗѫӑ
16.08.2016
14:25:04
наоборот при const/let надо еще TDZ учитывать, поэтому они сильно быстрее не будут. разве что после блока можно память подчищать уже. но gc все равно придет когда сам захочет

Alexander
16.08.2016
14:27:48
Авось утечек станет меньше, вся надежда на это.

Ҫѐҏӗѫӑ
16.08.2016
14:28:31
за счет чего?
есть еще редакторы, которые не ругаются когда var с одним и тем же именем напишешь?

Alexander
16.08.2016
14:29:34
За счет того, что не нужно держать лишнего в памяти.

Ҫѐҏӗѫӑ
16.08.2016
14:30:50
поподробнее. если я ничего не упускаю, то утечка и возможность освобождения памяти сейчас или через 1с слабо связаны)
и конст с летом не спасают от утечек