@react_js

Страница 3726 из 5115
Default
19.04.2018
15:49:07
За оффтоп

Dmitry
19.04.2018
15:50:02
гайс, как в реселекте замеморайзить только 1 аргумент ?

Artyom
19.04.2018
15:51:10
reselect(s => s, identity => identity) =\

Dmitry
19.04.2018
15:51:23
но остальные аргумент ж пропадут

Google
Artyom
19.04.2018
15:52:42
mstp = state => ({ arg: state.arg, memArg: selector(state), })

Dmitry
19.04.2018
15:53:51
че ?

и что оно даст ?

Artyom
19.04.2018
15:55:22
Как ты думаешь?

А что надо?

Dmitry
19.04.2018
15:56:16
fn(a,b,c){}

надо меморйзить если поменялась а

Artyom
19.04.2018
15:56:24
и что оно даст ?
shallow campare у connect или PureComponent не будет трегерится

Dmitry
19.04.2018
15:56:34
в остальных кейсах

не надо ниче делать

Artyom
19.04.2018
15:56:58
Dmitry
19.04.2018
15:57:21
selector(state)

Slava
19.04.2018
15:57:27
вынеси эту логику (если она вообще нужна) в ту же сагу
Ну значить 2й вариант. Сохранять в очердь экшены что-бы потом по открытии сокета их выполнить?

Google
Dmitry
19.04.2018
15:57:30
при чем мап стейт ту пропс

вообще

Slava
19.04.2018
15:57:54
и просто делать function componentDidMount() { this.props.dispatch(getMessages()); }

Valeriy
19.04.2018
15:58:10
сделай некий кастомный handshake протокол общения с бакендом

Slava
19.04.2018
15:58:43
Потому что на этапе маунта сокет еще не открыт и данные не получить

Valeriy
19.04.2018
15:59:03
открыл веб сокет, и пусть тебе бакенд шлет некий инициализирующий пакет пока ты его не получишь и не дашь отмашку что все гуд

Valeriy
19.04.2018
16:00:09
в разных браузерах есть проблема с подпиской на логические каналы

Slava
19.04.2018
16:00:18
А

Valeriy
19.04.2018
16:00:23
в сокетах и в EventSource

часто бывает так, что ты в вебе думаешь что уже открыл вебсокет, а бакенд так не думает еще

и наоборот

я ловил и одну и другую ситуацию

событие типа onopen не канает

Artyom
19.04.2018
16:01:31
при чем мап стейт ту пропс
Расскажи потом, как решил. Может пойму что ты хотел

Slava
19.04.2018
16:01:44
Dmitry
19.04.2018
16:01:46


Slava
19.04.2018
16:01:52
Именно ответ от сервера?

Dmitry
19.04.2018
16:02:01
тип такого, но там надо меморайзер переписывать для реселекта

Google
Slava
19.04.2018
16:02:15
Типа прислать на клиент ready?

Valeriy
19.04.2018
16:03:04
А что тогда?
ну я в итоге свой handshake реализовал бакенд открывает вебсокет и начинает слать в него пакеты каждые 500мс как только фронт подписался на все логические каналы, принимает такой пакетик, так сразу дает бакенду отмашку типа все ок и я готов к приему данных

по крайней мере такая схема во всех браузерах у меня норм работает

а то в сафари свои особенности, в фф и хроме свои

про IE ваще молчу

Valeriy
19.04.2018
16:04:07
и весь этот зоопарк надо поддерживать

Slava
19.04.2018
16:04:25
Допустим сервер скажет все ок

данные можно гнать

но

Valeriy
19.04.2018
16:04:53
все ок должен сказать не сервер, а браузер

Slava
19.04.2018
16:05:22
mount component -> dispatch(getMessages()) -> openConnection

Valeriy
19.04.2018
16:05:38
да не тащи ты это все в компоненты

делай это в сагах

Slava
19.04.2018
16:05:57
В сагах инициировать получение сообщений?

Valeriy
19.04.2018
16:06:04
ты в компоненте запаришься такие процессы обрабатывать

да все делать надо через саги

компоненты только за отображение информации должны отвечать и интерактив с юзером

Slava
19.04.2018
16:07:07
Хм, ну тогда сага будет знать что нужно получить сообщения, а если чата на страничке потом не будет?

Окей

Google
Valeriy
19.04.2018
16:07:26
тут надо понимать, что не страничка и не компонент отвечают за процессы приложения

а приложение рулит компонентами

логика у тебя должна крутиться параллельно вся

реакт компонентики подключенные к стейту должны с этими сагами посредством экшинов общаться

Slava
19.04.2018
16:08:31
Да, я согласен

Admin
ERROR: S client not available

Valeriy
19.04.2018
16:09:05
в итоге может получиться что то типа такого



Slava
19.04.2018
16:09:20
Просто с http инициация именно через componentDidMount идет?

Valeriy
19.04.2018
16:09:51
т.е. из сокета пришло сообщение в STREAM_INITIALIZE ты отреагировал разок и далее если разрывы соединения будут, то takeEvery это поймает

если будет релогин юзера, то весь процесс будет cancel и потом снова fork

Slava
19.04.2018
16:10:36
Сейчас как-то так export default function* wsHandling() { while (true) { yield takeLeading('START_WS'); try { const socket = yield call(createWebSocketConnection); const socketChannel = yield call(watchMessages, socket); yield fork(function* saga() { const { cancel } = yield race({ task: [ call(externalListener, socketChannel), call(internalListener, socket), ], cancel: take('STOP_WS'), }); if (cancel) { yield put(connectionClosed()); socketChannel.close(); } }); yield put(connectionOpened()); } catch (e) { console.error(e); yield put(connectionError()); return; } } }

Valeriy
19.04.2018
16:10:38
Просто с http инициация именно через componentDidMount идет?
надо четче разделять компоненты от логики

ну у тебя я тут не вижу yield cancel(...)

любой повторный круг событий у тебя форкнет задачи

задублирует их

Slava
19.04.2018
16:11:49
ну я имею ввиду smart компонент

takeLeading же отработает один раз?

Valeriy
19.04.2018
16:15:27
takeLeading же отработает один раз?
оно запустится и будет висеть пока не завершится

Google
Valeriy
19.04.2018
16:15:39
потом будет ожидать очередного события

я честно говоря такого паттерна использования не видел

т.е. вот такая запись мне кажется не правильной yield takeLeading('START_WS');

Slava
19.04.2018
16:17:26
Да я может что-то конечно напутал

Valeriy
19.04.2018
16:17:28
на самом деле это тоже самое что takeEvery, только takeEvery срабатывает всегда, а takeLeading сработает и пока не завершится не будет выполнять очередную задачу

Slava
19.04.2018
16:18:13
Тобишь для форка нужен кенсл?

Идеи брал тут https://medium.com/@ebakhtarov/bidirectional-websockets-with-redux-saga-bfd5b677c7e7

Orkhan
19.04.2018
16:19:57
Кто работал с react-apollo ?

Valeriy
19.04.2018
16:20:11
Тобишь для форка нужен кенсл?
ну если ты форкнул задачу и потом надо ее остановить корректно, то нужно сделать cancel для нее

если у тебя в конструкции try/catch посыпалось там че то, то cancel по моему автоматически будет сделан

Storn
19.04.2018
16:22:10
Пагни и девушки лень самому верстать, подскажите бесплатные ui

Если это вас не сильно затруднит:)

Storn
19.04.2018
16:24:42
Adobe Dreamweaver ))))
Спасибочки огромное) сейчас как замучу дизайн

Artyom
19.04.2018
16:34:27
Пагни и девушки лень самому верстать, подскажите бесплатные ui
https://github.com/artalar/blog/blob/master/src/pages/currently-best-ui-kits.md

Сергей
19.04.2018
16:35:40
Ребята. В состоянии хранится массив объектов this.state = {fields: [{id: 'name', name: 'field name', required: true}, ...]} необходимо изменить параметр 'name' через <input name="name" value={this.state.fields[index].name} onChange={ ... } />

Pauline
19.04.2018
16:36:58
Adobe Dreamweaver ))))
он же там выдаст наверное такое

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