
Александр NeonXP⚛??
03.07.2016
09:40:01
Для php есть решения на основе пакета php-v8js для рендера. Сам скоро этим займусь в проекте.

Vitaly
03.07.2016
09:40:26
Окей чатик, можно я поделюсь своей болью...
Представьте что у нас есть Users и мы хотим добавить нового. А еще мы понимаем редактируем ли мы или создаем юзера по параметру id в роуте.
Представили? Продолжим - на странице юзера есть 3 табы, 2 из которых доступны только после того как мы сохраним юзера в базе и получим его id. И тут начинается веселье, в настоящий момент я делаю следующее:
submitForm(data){
return handleForm(data).then(({ id }) => !data.id ? browserHistory.push(`/users/${id}?new`) || this.setState({ tab: 2 }))
}и в componentWillMount проверяю наличие new в квери роута, если есть - меняю табу.
И вот сегодня, жарким воскресным утром меня осенило что я делаю что-то не так, а как вы решаете эту проблему?)

Ostap
03.07.2016
10:01:59
Делаю так же. Самого очень бесит этот подход. Иногда разделяю контейнер вьюшки и тогда меньше магии в cwm

KlonD90
03.07.2016
10:09:26
Бить бэкэндеру в лицо

Google

KlonD90
03.07.2016
10:10:19
Пусть сделает генерацию идов заранее лол

Dmitry
03.07.2016
10:12:55
Эм. Я так понял там админка для создания и редактирования юзеров. Тут бэкэнд ни при чём

KlonD90
03.07.2016
10:14:07
Разве не классическая задача прокидывать связи по иду не имея ида. Имей ид :о

Vitaly
03.07.2016
10:17:04
Класическая, но создавать пустые записи в бд? Имхо это перенос костыля с фронта на бэк. В предидущим приложении я на клиенте создавал uid и мне в принципе было пофиг на бэк, но тут есть бизнес-логика.

Dmitry
03.07.2016
10:17:39

KlonD90
03.07.2016
10:18:44
Если пг можно записи не создавать а из сиквннса число создать или взять и сделать свой генератор

Vitaly
03.07.2016
10:18:55
Вот вот, и все эти костыли помню только я(первый день после написания), а в идеале сделать код поддерживаемым и прозрачным.

Dmitry
03.07.2016
10:19:36

KlonD90
03.07.2016
10:21:50
Все это бд

Vitaly
03.07.2016
10:26:29
Ну индексировать мы можем хоть по uid с фронта, но проблема остается таже, там нужно создать все зависимости (продукты, купоны, etc), проверить уникальность емейла... то есть в любом случае нам надо что-то отправить и что-то получить

Vladimir
03.07.2016
11:53:49
А в чем все же проблема? Нужно переходить на вторую табу только если пользак новый?

Ostap
03.07.2016
12:09:32
Можно генерировать свой ид на фронте, и назвать это оптимистичным апдейтом. А после синка, перезаписать модель с бэка

Google

from
03.07.2016
12:11:52
Не очень понятно — почему сабмит формы должен переключать вкладку вообще?

Art
03.07.2016
12:22:37
Не пойму чёт в чем проблема-то?
Нет юзера, создал, отправил на сервер, тот ответил тем же объектом, но с id. А дальше <Tab active={user.id} />
Хуйня какая-то, а не проблема.

Andrey
03.07.2016
12:23:07
плюсую, так и не понял в чем серьезная проблема и где именно

anoru
03.07.2016
12:25:59
Пусть сделает генерацию идов заранее лол
Очень плохая идея. Нет ничего плохого в том, чтобы создать запись с несколькими полями, а потом отредактировать и добавить уже новые значения. Решение используется, наверное, во всех проектах

Andrey
03.07.2016
12:29:04
а так добавить внтуренние статусы юзеров, только созданный, отправленый, созданный на бэке и так далее и от этих статусов по разному обрабатывать. С помошью HoC таким юзерам ограничивать доступ к меню


Vitaly
03.07.2016
12:29:22
Как я написал выше - селектор танцует от id в параметрах роута, так что если его нет - то мы считаем что и в базенке такого нет. Без этого нам придется создавать курсоры на активного юзера. Сейчас селектор выглядит так:
export default (key, entityKey = key, idKey = 'id') => selector(
s => s[key],
s => s.entities[entityKey],
(_, { params }) => params && params[idKey],
({ ids, options, ...state }, source, id) => {
const data = id ?
{ data: source[id] } :
{ collection: options && !!options.ids ?
options.ids.map(identity => source[identity]) :
ids.map(identity => source[identity])
};
return { ...state, ...data, options };
}
);
То есть варианта 3 - писать курсоры на активного юзера, и обновлять его при изменении роута или отдельным экшеном. Или создать еще одну абстракцию которая будет выполнять роль локального представления данных на сервере и патчить ее при респонзе, в этом случае поялсяется клиентский uid и мы танцуем от него. Ну и третий - самый просто - забить)


Michael
03.07.2016
13:43:04

Konstantin
03.07.2016
14:23:21
кто-то юзал material ui components. не подскажите как в date picker выставить минимальную дату какую можно выбрать

Denis
03.07.2016
14:25:18
наконец дошли руки до material ui, импортить Editor Colors, либо еще что?
https://github.com/chicoxyzzy/webstorm-settings
тут если чо с оверрайдами, но там еще много моего всякого
@chicoxyzzy ^

anoru
03.07.2016
14:36:36
зато глаз легко отделяет от другого :D

Andrey
03.07.2016
14:39:05
и заставляет не писать jsx ))

Denis
03.07.2016
14:42:13
дополнение к no-js-plugin )

Denis
03.07.2016
14:43:32
Базовые знания всегда важны и актуальны:

Denis
03.07.2016
14:44:44
?

Andrey
03.07.2016
14:45:30
Но все быстро закончилось на HoC )

Google

Mustard
03.07.2016
14:45:44
Всем доброго вечера. Есть вопрос: Нормально ли сохранять данные в стейты напрямую (через =, а не setState()). Знаю что в документации написано капсом "НЕЛЬЗЯ", но коллега по работе говорит что можно и все пацаны так во дворе делают. Рассудите, пожалуйста

Andrey
03.07.2016
14:46:41

Mustard
03.07.2016
14:48:44

Andrey
03.07.2016
14:49:57
Тогда не понятно, что он там хранит и зачем, если это не нужно показывать прямо сейчас

anoru
03.07.2016
14:54:23

Mustard
03.07.2016
14:55:42
Ну не прямо сейчас, но через некоторое время подействует. Ему главное сам факт того что оно влияет на отрисовку, значит надо хранить в стейтах.

anoru
03.07.2016
14:56:22
тогда через некоторое время и надо ставить ))

Mustard
03.07.2016
14:57:14

anoru
03.07.2016
14:57:19
А можно какой-нибудь кейс посмотреть зачем он делает так?
Возможно он просто не хочет рефакторить код. Тогда может помочь показать мысли комьюнити из конфы, офф доки и слова третьего человека о том же

Mustard
03.07.2016
15:03:21
Видимо привык уже так или религиозные убеждения не позволяют, не знаю. Ну он уже меньше стал так делать, после того как обсудили, но все же.
Мне просто стало интересно, почему именно с технической стороны так делать нельзя) на каком моменте проект сломается, если так делать

anoru
03.07.2016
15:04:35
в доках же написано

anoru
03.07.2016
15:05:04
там же где капс )

Andrey
03.07.2016
15:06:03
проект не сломается, но можно получить странное поведение компонентов и не изменения состояний )

localvoid
03.07.2016
15:24:35
setState устанавливает nextState, а то что в this.state - это текущий стэйт

Mustard
03.07.2016
15:31:26

localvoid
03.07.2016
15:32:03
сейчас открыл доку, там же всё внятно и расписано :)

Viacheslav
03.07.2016
16:08:47
@DenisIzmaylov как называется либа для реализации graphql на стороне клиента?
не могу нагуглить

Google

Viacheslav
03.07.2016
16:12:14
нашел https://github.com/relay-tools/relay-local-schema

Vladimir
03.07.2016
16:30:58
Всем привет! Посоветуйте какой-нибудь бойлерплейт для Universal App. Что-то для небольших экспериментов, с минимальной серверной частью. Если умеет с разными БД работать или вообще без них обходится то будет просто отлично. А может есть такие где CRUD из коробки?

Igor
03.07.2016
16:34:45
ну и кто-то писал, что были проблемы с запуском на проде

Viacheslav
03.07.2016
16:35:53
http://andrewhfarmer.com/starter-project/

Vitaly
03.07.2016
16:39:28
А по поводу круда из коробки https://github.com/partyrooms/web

Admin
ERROR: S client not available

Vladimir
03.07.2016
16:40:00

Igor
03.07.2016
16:40:18

Vladimir
03.07.2016
16:41:16

Ostap
03.07.2016
17:36:21
rfx stack
Сорри что без ссылки
С теплфона
И кстати, подскажите плагин для саблайма для js-hyperlink
Как в атоме или vs code

Alexey
03.07.2016
17:42:33
кажется это goto definition называется
правда у меня нормально не получилось настроить в sublime его

Ostap
03.07.2016
17:43:08
Угу. Go to definition
Мдя. Хочу как в веб шторме, но можно как в vscode хотяб

Alexey
03.07.2016
17:46:07
можно попробовать на ternjs посмотреть

Google

Alexey
03.07.2016
17:46:12
https://packagecontrol.io/packages/TernJS

Denis
03.07.2016
19:07:33
Хотя стоп
Видео не было
Но Лёша и Антон записывали, у Антона какое-то ЧП случилось, а запись от Охрименко у меня в облаке. Куда лучше заливать - YouTube или Vimeo?
Могу на coub

KlonD90
03.07.2016
19:27:36
YouTube

Artyom
03.07.2016
19:28:09
Vimeo

Viacheslav
03.07.2016
19:54:08
YouTube
на vimeo нет выбора скорости проигрования

Andrey
03.07.2016
20:42:41
чем плох PREACT?

Ivan
03.07.2016
20:45:12
преакт охуенен

Andrey
03.07.2016
20:47:07
охуенно то что оно с роутером и редаксом в сумме килобайт 10
и апишечка как у реакта. почти )

Ivan
03.07.2016
20:48:33
только сравни с любой сраной картинкой на любом сайте 10кб или 100 для js не суть разница

Andrey
03.07.2016
20:49:18
ггы размер бандла в этой демке 7.1кб
https://preact-boilerplate.surge.sh/profile
семь ссаных килобайт КАРЛ
попробую в новом проекте. об ощущениях попробую отписаться)

Nikita
03.07.2016
21:28:14
не понимаю, на чем библиотеки вроде preact экономят?