
Danil
19.01.2017
11:36:00
Меняется роутинг и форма (регистрация, авторизация)
очень зависит от приложения. если у тебя при смене табов меняется роутинг, те это основная навигация - безусловно да. а если это 1 мелкий кусок интерфейса, не вижу проблемы хранить в стейте

Nikita
19.01.2017
11:36:36

Danil
19.01.2017
11:37:08
Ну на табы я думаю онклик повешать, чтоб при клике рендерилась нужная форма

Google

Dmitry
19.01.2017
11:38:15
Ну локально только модификаторы для стилей хранить, а онклик кастомный снаружи все еще можно пробросить

Сергей
19.01.2017
11:38:22
открытый таб должен храниться вне компонента, ибо это не временное состояние

Nikita
19.01.2017
11:38:26
ты странными категориями мыслишь. у тебя есть табы, у них не должно быть onClick. Должен быть onSwitch(tab: string), например.

Сергей
19.01.2017
11:38:48

Nikita
19.01.2017
11:39:18
SyntheticEvent? не
можно onChange(tab: string, event: SyntheticMouseEvent)

Сергей
19.01.2017
11:40:21
нет, лучше уж первым ивент, ближе к стандарту

Nikita
19.01.2017
11:40:31
не согласен
ты выносишь кишки компонента наружу

Сергей
19.01.2017
11:40:56
id открытого таба это не кишки

Danil
19.01.2017
11:41:01
Ну я мыслил так. Есть таб, который является спаном. Я на него кликаю, следовательно событие onClick

Nikita
19.01.2017
11:41:04
сегодня switch по onClick, завтра по keyPress

Google

Nikita
19.01.2017
11:41:20
я про event

Сергей
19.01.2017
11:41:41

Nikita
19.01.2017
11:42:02

Dmitry
19.01.2017
11:42:40
Мне кажется или вы про одно и то же?
Просто про разные названия

Nikita
19.01.2017
11:43:50
не, это важно. onClick - это кишками наружу. onChange/onSwitch/onTabUpdate - это ок

Сергей
19.01.2017
11:45:34

Dmitriy
19.01.2017
11:50:53
какой PropTypes задать для мапы строка-число вида {'10': 14,'15': 313, '514': 2231,...}? кол-во ключей динамическое
PropTypes.object eslint не пропускает

Сергей
19.01.2017
11:52:15

Dmitriy
19.01.2017
11:53:21
спасибо

Ivan
19.01.2017
12:25:31
ктонибудь в курсе может, в БД хранится текст с \r\n т.е. с переносами строки. когда получаю в стейт и вывожу из стейта, они теряются. хотя бд отдает json с ними

Eugeniy
19.01.2017
12:28:38
react по-моему удаляет все такое

Ivan
19.01.2017
12:29:34
нашел. надо задать css - white-space: pre-wrap;

Сергей
19.01.2017
12:29:39

Denis
19.01.2017
12:35:22

Mikhail
19.01.2017
12:46:02

Denis
19.01.2017
12:46:39
Нет мы ещё хуже...
а то очень уж любят банковские работники на бэкенде из Java писать сайты )

Adel
19.01.2017
12:48:10
playframework и все

Google

Adel
19.01.2017
12:48:39
ну или еще попроще чего уже есть

Denis
19.01.2017
12:48:48
чотакого?
ничего плохого, но обычно после ухода ключевого разработчика поддерживать ЭТО становится некому
ну и очень уж дорогое удовольствие Java для простых смертных и не банковского сектора

Mikhail
19.01.2017
12:49:37

Adel
19.01.2017
12:50:48
программисты дорогие или писать долго?

Danil
19.01.2017
13:06:32
Из вышесказанного можно резюмировать, что всю мелкую работу с ui лучше делать в самих компонентах с использованием синтетик ивэнт
Так?

Сергей
19.01.2017
13:07:28

Danil
19.01.2017
13:08:57
Ну я все равно не понял что делать с 13 li
Вешать on change на все?

Aleksey
19.01.2017
13:09:28
откуда в <li> onChange

Danil
19.01.2017
13:09:58
Ну вот у меня 13 селектов, которые ещё и сделаны как li, к каждому привязана маска инпута. Мне получается на все селекты онклик повешать?
мм, onChange + value
Я вот и спрашиваю

Aleksey
19.01.2017
13:11:13
если это <li> то onChange там нет. на селектах есть onSelect
s/onSelect/onChange

Danil
19.01.2017
13:12:43
Ну получается надо 13 онкликов вешать?

Aleksey
19.01.2017
13:13:23
если у тебя кастомные селекты на <li> элементах - да

Google

Сергей
19.01.2017
13:13:28
события умеют всплывать так-то
но не помню, как с этим в реакте)))

Aleksey
19.01.2017
13:13:51
нормально с этим в реакте. но он сам делегирует

Danil
19.01.2017
13:14:12
Ну там вообще нет селектов ul с li просто принцип работы как у селектов

Aleksey
19.01.2017
13:15:19
вешай onClick. реакт однохренственно на root компоненте слушает все события от дерева и сортирует. нет нужды возиться и заниматься ненужной микрооптимизацией с делегированием

Danil
19.01.2017
13:16:20
У меня ещё такой вопросик есть, как маски телефонов делаются, в гугле только джквери библиотека
Хочу в общем без библиотек сделать

Aleksey
19.01.2017
13:16:55
есть react-masked-input или как-то так
https://github.com/insin/react-maskedinput

Dmitrii
19.01.2017
13:17:55
кто как делает сабмит формы для редактирования данных, когда обновление денормализованного объекта может состоять из 3-4 запросов на разные эндпоинты

Aleksey
19.01.2017
13:18:30
а чего это на бэк не перенести? или к бэку доступа нет7

Admin
ERROR: S client not available

Aleksey
19.01.2017
13:18:31
?

Dmitrii
19.01.2017
13:18:52
нету доступа

Aleksey
19.01.2017
13:20:05
а в чем именно грабля? четыре запроса, конечно, не самая приятная ситуация но не так чтобы невозможная

Dmitrii
19.01.2017
13:21:50
да грабли нет, я понимаю что можно вообще убрать сабмит и сделать каждое поле обновляемым по onchange или делать диффы на сабмит и разбивать потом данные по разным запросам, мне интересно какими способами вы решали это, может что интересное будет

Aleksey
19.01.2017
13:23:51
честно говоря, обычно на бэк такая логика переносится. фронт, по идее, не должен знать нюансы как именно обрабатывать связанные объекты. иногда бывает что апдейт еще и по релейшенам что-то цепляет на бэке

Dmitrii
19.01.2017
13:24:30
согласен на 100%

Alexey
19.01.2017
13:25:54
это если монолитный бэк то да, а если куча микросервисов то приходится фронту всем рулить

Dmitriy
19.01.2017
13:25:56
обновление денормализованного объекта - это обычно обновляется сперва нормализованный, а потом уже бекенд делает денормализацию, причем не обязательно синхронно это делать

Alexey
19.01.2017
13:25:59
у меня такая же ситуация

Google

Dmitrii
19.01.2017
13:26:03
там как раз изза many-to-many обновление одной сущности разбито на кучу эндпоинтов, но редактироватся оно должно в одной форме как денормализованный объект

Dmitriy
19.01.2017
13:26:13
это через очереди и воркеры должно делаться на беке
не должно быть возможности привести систему в невалидное состояние, если ты отправил запрос на один ендпоинт, а на другой забыл

Aleksey
19.01.2017
13:27:29
у меня такая же ситуация
мрачновато. фронт от бэка отделен здоровенной такой хренью как сеть - ни транзакций ни гарантий доставки

Dmitriy
19.01.2017
13:28:13
поэтому лучше так: фронт отправляет в одном запросе все что нужно, на беке создались задачи все это раскидать по разным частям системы
имхо

Alexey
19.01.2017
13:28:40
это если нужна транзакционность, согласен

Dmitrii
19.01.2017
13:29:02
к сожелению пока бэк не поменять, поэтому я сделал каждое поле, как отдельная форма, на onchange с троттлингом посылается update, на одни и теже либо разные эндпоинты в зависимости от поля

Alexey
19.01.2017
13:29:04
в моем случае это только на update, и там можно одну часть отправить а другую нет
коллеги, у меня другой вопрос, тут ведь многие редаксы используют? сталкивались ли с древовидными структурами типа
inerface Node {
id: number,
children: Node[]
}
Как решали задачу иммутабельно добавить/удалить ноду в дерево?
можно конечно развернуть в плоский список, тогда все понятно

Dmitriy
19.01.2017
13:30:52
есть алгоритмы иммутабельного обновления дерева

Aleksey
19.01.2017
13:31:46
что значит иммутабельно в контексте дерева? дерево должно быть представлено каким-то внутренним объектом тогда есть смысл говорить об иммутабельности

Dmitriy
19.01.2017
13:32:25
как и в контексте любого другого объекта, ты не можешь сделать tree.children.push()

Alexey
19.01.2017
13:33:12
так в этом и вопрос был
или вы не мне это поясняете?

Dmitriy
19.01.2017
13:33:31
иммутабельное обновление - это по сути копирование с заменой/удалением/добавлением части при копировании
это для @aleksxor было

Alexey
19.01.2017
13:33:49
а, ок

Aleksey
19.01.2017
13:35:56
вопрос был про то как дерево представлено. я так понял что реализация наивная - каждый элемент с корня это { id, children: [<ids>] }.
я бы порекомендовал глянуть в immutable.js. не пробовал там сильно глубокие рекурсивные структуры разбирать. но неглубокие вполне

Alexey
19.01.2017
13:37:16
нет, не children: [<ids>], я структуру выше привел в виде интерфейса TS
в общем, погуглю тогда алгоритмы, спасибо