@react_js

Страница 743 из 5115
Vladimir
15.12.2016
13:05:18
А как вообще устроен механизм, когда экшены отправляются по сокету на сервер и с сервера диспатчатся?

Котяй Негодяй
15.12.2016
13:06:19
У тебя просто как обычно, какой-то очень особый подход к задачам)
Ну вот захотел я из**нуться. =) Поставил проект на сокеты. Чем не жизнеспособный вариант — построить взаимодействие фронта и бэкенда на сокетах вместо AJAX?

Пока что только одна проблема.

Alexey
15.12.2016
13:07:41
Google
Котяй Негодяй
15.12.2016
13:07:49
А как вообще устроен механизм, когда экшены отправляются по сокету на сервер и с сервера диспатчатся?
Определённые экшны слушаются сокетом. Сервер их получает, что-нибудь делает, отправляет в сокет событие. Событие происходит на клиенте, как экшн в сторе.

Редакс? :)
Редакс норм.

То есть, по сути, серверу доступен dispatch().

Vladimir
15.12.2016
13:12:30
ну вот сам код, который обрабатывает событие из сокета на клиенте и диспатчит action, кажется, что туда же можно добавить какую-то логику, что если с сервера пришел определенный action, помимо него диспатчить еще один

Дмитрий
15.12.2016
13:13:27
Ну вот захотел я из**нуться. =) Поставил проект на сокеты. Чем не жизнеспособный вариант — построить взаимодействие фронта и бэкенда на сокетах вместо AJAX?
Я не про вебсокеты, а про экшны, к ним какой-то прям особый подход) Если с сервера прилетел экшн — то его и диспатч. Если авториация — это обмен экшнами, то пишешь всю логику в функции и на клиенте диспатчишь её

Котяй Негодяй
15.12.2016
13:14:26
Чтобы было понятно, вот связка с сокетом на сервере: const onAction = () => async ( socket, dispatch, { type: actionType, ...actionData }, ) => { const action = actions[actionType]; try { if (action) { await action({ data: actionData, dispatch, socket, }); } else throw new NoActionError(`Отсутсвует экшн ${actionType}`); } catch (e) { dispatch(requestReject(e)); } }; const onConnect = (socket) => { const dispatch = action => socket.emit('action', action); socket.on('action', data => onAction(socket, dispatch, data)); };

Дмитрий
15.12.2016
13:18:31
Значит, я не совсем верно понял Редакс. =) Но там же всё просто. Блин, чего я не понял?
У него сложность не в коде и подходах, а в замысле. thunk всего 15 строк длиной, но его реальную суть я понял не совсем сразу)

Alexey
15.12.2016
13:18:54
У него сложность не в коде и подходах, а в замысле. thunk всего 15 строк длиной, но его реальную суть я понял не совсем сразу)
представь что можно просто обойтись без него и не морочить себе и другим голову

Котяй Негодяй
15.12.2016
13:19:18
Магическая неведомая фигня?

Дмитрий
15.12.2016
13:19:52
Ну просто сам редукс действует поперек привычных подходов

Котяй Негодяй
15.12.2016
13:20:11
Это да.

Google
Дмитрий
15.12.2016
13:20:23
Короче, разрыв шаблона — это норма ?

Я как раз ту ссылку что ты скинул и вкуривал. Но на английском там сейчас уже побольше информации, емнип

Vladimir
15.12.2016
13:26:11
Это отдельная библиотека, и это, мне кажется, совсем не то место, куда мне логику самого приложения стоит пихать.
со "стандартным" подходом эта логика должна быть в action'е-функции вот так: const login = (userName, password) => (dispatch, getState) => { dispatch({type: LOGIN}); api.login({userName, password}) .then(() => { dispatch({type: LOGIN_SUCCESS}); dispatch({type: DO_SOMETHING_AFTER_LOGIN}); }) .catch(error => { dispatch({type: LOGIN_FAIL, error}) }) }

Котяй Негодяй
15.12.2016
13:30:10
Ну, короч. Сервер отправляет вот это: { type: 'AUTH_OK', token: '9834t34g9ry3498u', id: 3231, login: 'user1', } И самое первое место на фронтенде, где я могу на это среагировать, — редьюсер. А в редьюсере нельзя вызывать экшны. А суть в том, что по данным от AUTH_OK я отображаю определённый интерфейс, одновременно вызывая: { type: 'SERVER_REQUEST_REPORTS' } Т.е. всё, что нужно, — иметь возможность подписаться конкретно на AUTH_OK вне редьюсера.

И такая возможность потребуется, в том числе, в слуячае использования Hunk.

Vladimir
15.12.2016
13:32:14
> И самое первое место на фронтенде, где я могу на это среагировать, — редьюсер думаю, можно еще в middleware раньше редьюсера

Котяй Негодяй
15.12.2016
13:32:39
А... Ну, да.

Писать свой middleware? =)

Владислав
15.12.2016
13:36:57
Писать свой middleware? =)
обязательно свой

не забудь выложить на гитхаб, поставим лойс

Alexey
15.12.2016
13:37:29
заодно про NPM не забудь

Котяй Негодяй
15.12.2016
13:38:04
Я, ваще-та, не горю желанием это делать. Шутники.

n0z3r0
15.12.2016
13:38:08
package.json

:)

Alexey
15.12.2016
13:39:13
другого способа читать экшны в редаксе у тебя нет, скажи спасибо автору идеи "нахуй диспатчер"

Владислав
15.12.2016
13:40:29
Я, ваще-та, не горю желанием это делать. Шутники.
ты только на митапах такое не говори, а то кто-то и не поймет

n0z3r0
15.12.2016
13:43:37
Народ как вы поступаете в случае когда у вас несколько табов, на каждой форма и в каждой форме получается есть Typeahead в котром вписывают значения и им выводится список. Как тут лучше организовать передачу данных?

Котяй Негодяй
15.12.2016
13:43:56
ты только на митапах такое не говори, а то кто-то и не поймет
Ну, у меня есть вполне конкретная задача, и я уперся в проблему, которую не смог заранее предвидеть (возможно, в силу отсутствия должного опыта в Редаксе, а м.б. и не только в редаксе). На митапах меня поймут — я хочу сделать так, чтобы потом не было мучительно больно.

Google
Котяй Негодяй
15.12.2016
13:45:26
Vladimir
15.12.2016
13:45:46
n0z3r0
15.12.2016
13:45:49
Так так а Store как привязать?

Vladimir
15.12.2016
13:45:57
с собственной продуманной архитектурой приложения

Alexey
15.12.2016
13:46:04
Предложи альтернативу.
все же от задачи зависит. может тебе пока вообще ничего для стейт менеджмента не надо, setState хватит

? ethorz
15.12.2016
13:46:06
mobx
jquery

n0z3r0
15.12.2016
13:46:09
Через контейнер привязать к конкретной форме?

Alexey
15.12.2016
13:46:16
или можно взять Flux, там нет проблем с чтением экшнов

n0z3r0
15.12.2016
13:46:34
Да я вот заюзад FluxUtils

спасибо ребятам кто посоветовал

n0z3r0
15.12.2016
13:46:53
пусть больше кода чем в редаксе зато меньше головняков

Dreamerinnoise
15.12.2016
13:47:42
>больше кода чем в редаксе и на редакс ещё катят бочку, мол, дофига boilerplate code

Владислав
15.12.2016
13:47:48
Через контейнер привязать к конкретной форме?
Я не могу телепатировать, что там у тебя, по идее, у тебя на каждую форму будет свое поле

но можно переиспользовать редюсер, например

n0z3r0
15.12.2016
13:48:19
Да совершенно верно, у меня несколько экзепляров одной и тойже формы

n0z3r0
15.12.2016
13:48:59
только данные в каждой свои

получается лучше сделать один Store

Google
n0z3r0
15.12.2016
13:49:20
для хендлинга запроса от каждой формы

и по ID формы складировать данные

так же?

Владислав
15.12.2016
13:50:15
ну да, что-то вроде form -> {ID} -> props

n0z3r0
15.12.2016
13:50:54
Еще есть вопрос

А как вы поступаете с формами

вот к примеру у меня есть одна модель Order в которой дофига полей

Admin
ERROR: S client not available

Владислав
15.12.2016
13:51:29
n0z3r0
15.12.2016
13:51:29
но в форме появляются только 7-10 полей

Да не тут операторская для такси

как быть в этом случае

и у меня Order модель содержит в некоторых свойствах объекты

а с формы нужны только ID и текстовые данные

Владислав
15.12.2016
13:52:22
я пока не понял проблемы

n0z3r0
15.12.2016
13:52:24
стоит ли делать уменьшенную модель для форм

Котяй Негодяй
15.12.2016
13:52:29
не, я про то, что ты не хочешь в опенсорс
Если будет что-то конкретное, может и выложу. Но меня смущает уровень скепсиса и агресси в сообществе. Поэтому я буду преодолевать это только в случае либо большого профита, либо большого альтруизма. А сейчас я копаю и познаю новое.

a
15.12.2016
13:52:37
модель? форма? чето я запутался

Владислав
15.12.2016
13:52:53
стоит ли делать уменьшенную модель для форм
я так всегда и делаю, у меня в редаксе хранится минимально возможный набор данных

если что-то нужно, через селекторы пишу

Google
n0z3r0
15.12.2016
13:53:33
Ясно :) значит урезанную модельку тогда буду добавлять :) спасбо

Котяй Негодяй
15.12.2016
13:54:33
у меня подобную логику сага разруливает
А вот здесь https://github.com/yelouafi/redux-saga Я так понимаю, takeEvery() подписывает fetchUser() на USER_FETCH_REQUESTED?

Vladimir
15.12.2016
13:54:34
?

Котяй Негодяй
15.12.2016
13:55:11
>уровень скепсиса и агрессии Хоспаде, ты так говоришь, как будто тебя пиздить за это будут
Я сам кого хочешь отпизжу. Ну, просто состояние души, что ли, такое.

n0z3r0
15.12.2016
13:55:18
@user999837 Под формой я понимаю OrderForm компонент под моделью понимаю объект который получает RAW Json и преобразует его в Immutable.Record

Владислав
15.12.2016
13:56:14
n0z3r0
15.12.2016
13:57:34
Ну в Store хранятся как Immutable.OrderedMap

Котяй Негодяй
15.12.2016
14:00:42
короче, просто ленивый, как и я
Да не, я пытался. Только сейчас оглядываюсь на проекты и понимаю, что мне уже стыдно за этот код. =) Когда развиваешься быстро и не чувствуешь потолка, старое видение мира быстро становится неактуальным. Поэтому оупенсорс, я считаю, пока рановато. Хотя, есть профит в адекватном и полном фидбеке на твой код, это да. Но тогда, когда ты сам подводишь какие-то итоги.

ага) жизнь становится значительно проще
Вот есть же решение, вы что все молчали. =))

Котяй Негодяй
15.12.2016
14:05:17
Хм... Нууу... Можно и так.

Чувак, который сейчас удалил сообщение, был стопиццот раз прав.

Но это религиозное преступление, я полагаю?

Aleh
15.12.2016
14:06:11
а что там было?

Дмитрий
15.12.2016
14:06:25
Хм... Нууу... Можно и так.
Я ж самого начала тебе это предлагаю ?

Котяй Негодяй
15.12.2016
14:06:45
а что там было?
О том, что я могу просто взять и вручную подписаться на события сокета.

Страница 743 из 5115