
Vladimir
18.04.2016
09:33:37
test: 'mocha —require babel-register',
test: 'tape test.js —require babel-register | tap-spec',
test: 'ava —require babel-register',
from here https://github.com/iamstarkov/generator-zen/blob/master/app/test-frameworks.js#L3

pepsi ¯\_(ツ)_/¯
18.04.2016
09:33:51

anoru
18.04.2016
09:35:45
https://github.com/erikras/redux-form/issues/726

Google

anoru
18.04.2016
09:35:49
Вот issue на тему выше

Вадим
18.04.2016
09:37:32
Здесь нет людей, которые пробовали и реакт и ангулар 2? И сделали какие то выводы для себя

Andrey
18.04.2016
09:37:47
Что некоторым из нас необходима поддержка IE8 и NoScript, в силу своих специфичных задач - факт, но в коммьюнити как правило любые попытки обсудить эту проблему и некоторые пути решения, сразу же натыкаются на шквал “Ой, автор, бросьте, это никому не надо, не майтесь ерундой, идите в ногу с временем! Ха-ха-ха, за окном же 23 век!”, и это раздражает <__<
Плюсую

Вадим
18.04.2016
09:40:00
Нет, я понимаю, что слова "лучше, хуже" вообще нельзя употреблять в общем смысле
что реакт подходит для одних людей/проектов, а ангулар для других

ssha
18.04.2016
09:40:42

anoru
18.04.2016
09:45:38
С тем, что ie8 требуется для многих кейсов согласен, но я о том, что не надо впадать в крайности и говорить, что только в России забивают на него

Alexander
18.04.2016
10:04:46
В России просто есть такое особое состояние, называется “западло” :D

anoru
18.04.2016
10:06:10
?

Ivan
18.04.2016
10:10:31

Evgeniy
18.04.2016
10:22:41
Ребят подскажите как организовать последовательность асинхронных запросов на сервер в redux. Изучаю React и redux и возникла проблема что иногда на странице появляются данные из запроса который отправлен раньше но ответ пришёл позже.

Artem
18.04.2016
10:24:26
co(function* () { yield firstAsunc(); yield secondAsync(); })

Google

Artem
18.04.2016
10:25:13
ну или redux-saga

Denis
18.04.2016
10:28:57
А кто уже использует mobx?
Или что-то подобное, что более эффективно работает с большими потоком?
событий/actions

Artem
18.04.2016
10:30:07
я с kefir.js работаю часто, но это немного не то

Антон
18.04.2016
10:31:32
Коллеги, у кого есть опыт написание e2e тестов?

Evgeniy
18.04.2016
10:37:35
Я имею ввиду что есть middleware который обрабатывает запросы но например при переходах по ссылкам в каждом компоненте вызывается подгрузка данных в одну переменную state. И может случится так что при переходе на 3 ссылку сначала появятся данные которые должны а потом те что подгружались по запросу второй ссылки, так как они просто пришли позже

Artem
18.04.2016
10:38:39
тогда проще в middleware организовать очередь запросов, если их порядок важен
или делать их параллельно, а мержить в стейт последовательно

Evgeniy
18.04.2016
10:39:53
Может я просто что то не так делаю но не знаю как объяснить понятным языком

Anton
18.04.2016
10:40:56
можно что то из такого попробовать https://github.com/itsmepetrov/redux-combine-actions

Sergey
18.04.2016
10:40:59

Evgeniy
18.04.2016
10:41:18
Да именно
А есть пример с очередью запросов в middleware

Artem
18.04.2016
10:43:09
опять я с ко, но обычно так решаю
co (function* (){
const firstResult = yield firstRequest(); //first action
const secondResult = yield secondRequest(data:firstRequest.data);
})
если есть redux-thunk, а экшны запросы возвращают Promise, то через генераторы это все просто работает

Evgeniy
18.04.2016
10:46:02
Именно
Запросы все возвращают promise использую axios

Artem
18.04.2016
10:46:43
тогда через генераторы попробуй
у тебя в firstResult будет ответ от сервера

Google

Artem
18.04.2016
10:47:07
от первого запроса
ну и так далее

Evgeniy
18.04.2016
10:47:28
Так а если количество запросов не 2 а n
Просто все в массив
И потом вызывать?


Artem
18.04.2016
10:48:01
сек
простыню сейчас покажу, но в ней все так и работает )
co(function* () {
yield clearOffers();
yield clearOfferContainers();
yield startSearch();
const offerContainerResponse = yield createOfferContainer({...search.conditions});
var {
response: {
entities: {
offerContainers
},
result: offerContainerId
}
} = offerContainerResponse;
let { status: containerStatus } = offerContainers[offerContainerId];
yield setOfferContainerId(offerContainerId);
searchStatus = yield getSearchStatus();
let progress = 0;
while (containerStatus === 'processing' && searchStatus === SEARCHING ) {
const start = new Date().getTime() + 5000;
yield getOffers(offerContainerId);
const offerContainerResponse = yield getOfferContainer(offerContainerId);
const offerContainer = offerContainerResponse.response.entities.offerContainers[offerContainerId];
containerStatus = offerContainer.status;
if ( offerContainer.progress !== progress ) {
progress = offerContainer.progress;
yield setProgrss(progress);
}
yield sleep(start - new Date().getTime());
searchStatus = yield getSearchStatus();
}
searchStatus = yield getSearchStatus();
if ( searchStatus === SEARCHING ) {
yield getOffers(offerContainerId);
yield searchComplete();
}
});


Evgeniy
18.04.2016
10:49:45
Спс буду смотреть

Vladimir
18.04.2016
10:50:37
боже

Artem
18.04.2016
10:53:21
сложные там ответы приходят
+ normalizr отрабатывает, приводит все к виду {entities:[], result: id}

anoru
18.04.2016
10:54:32
@dex157 normalizr вроде как раз для этого придумали, но я не пробовал

Artem
18.04.2016
10:54:58
да, просто, если одна сущность, то ее вот так и приходится вытаскивать из ответа

Evgeniy
18.04.2016
10:55:04
Чёт пока не совсем понял

Artem
18.04.2016
10:56:26
тут асинхронный запрос создает search контейнер, и код заберает ответы пока контейнер со статусом processing
все асинхронно

Yanis
18.04.2016
12:40:34
Влад, а что тебе не нравится?
боже

Алексей
18.04.2016
12:40:55
Заходите болтать голосом https://discord.gg/0fqa3L0XnnNs44A8

Google

Vladimir
18.04.2016
12:40:57
8 строчек чтобы получить глубокое значение из объекта
@urbis мне кажется это mis-usage of destructuring
это не упрощает а делает только сложнее

Alexey
18.04.2016
12:42:07
страшненько смотрится

Vladimir
18.04.2016
12:42:29
const offerContainers = R.path(['response', 'entities', 'offerContainers'], offerContainerResponse);
const offerContainerId = R.path(['response', 'result'], offerContainerResponse);

Alexey
18.04.2016
12:42:56
ну или lodash.get

Vladimir
18.04.2016
12:43:39
или .get да

Admin
ERROR: S client not available

Artem
18.04.2016
12:44:00
да я и не спорю, что можно красивее сделать, разрабатываю почти в одиночку, мне так стало привычнее, а подобные вопросы дело вкуса, потому что для одной цели, вытащить данные

Alexey
18.04.2016
12:45:35
ну главное, чтобы ты потом завтра вспомнил, что ты хотел сказать тут )

Vladimir
18.04.2016
12:46:47
ага

Alexey
18.04.2016
12:47:52
Ну и lodash еще защищает от осутствия промежуточных св-в. Не уверен, что в случае с destructuring assignment это будет работать

Artem
18.04.2016
12:48:41
request до этого проверяется, так что в этом плане проверка идет уровнем ниже

Vladimir
18.04.2016
12:52:46
destructuring насколько я помню fail-safe и вернёт undefined если что-то по пути не найдёт

Alexey
18.04.2016
12:55:49
по-моему null или дефолтное значение, если укажешь

Oleg
18.04.2016
14:15:44


Dmitry
18.04.2016
15:14:48
Ребят есть вопрос, ставлю обработчик onClick на кнопку и при клике, в обработчик попадает дочерний элемент.
Как можно предотвратить такое поведение?
<button onClick={this.props.clickDialDigit} data-digit="call"><i className="fa fa-phone"/></button>

Alexander
18.04.2016
15:15:49
Не знаю как это в реакте, но вообще это же про делегирование. Чекай в хэндлере на что клик
А не
Вру

Google

Alexander
18.04.2016
15:16:10
Это про event capturing

Aleksandr
18.04.2016
15:16:28
через ref прозще ж button получить, не?

Roman
18.04.2016
15:16:35
это поведение обработчиков по умолчанию, только если вешать отдельный обработчик на дочерний элемент, в который вешать e.stopPropagation(). Вообще не очень понятно, зачем нужно, чтобы на дочерний элемент не вызывалось событие. Возможно, дочерний элемент не должен быть дочерним у блока, на который вешается обработчик?
то есть им место в одном общем контейнере — кнопке и, получается, иконке

Alexander
18.04.2016
15:17:03

Roman
18.04.2016
15:18:30
<div><button onClick={this.props.clickDialDigit} data-digit="call" /><i className="fa fa-phone"/></div>
вот так то есть
ну или местами поменять иконку и кнопку, смотря как по дизайну
отдельно замечу, что иконочные шрифты вроде бы все, если я не ошибаюсь

anoru
18.04.2016
15:20:15
@dmacompton есть event.target и event.currentTarget
Один ссылается на чилд, который кликнул. Другной на элемент, где обработчик
в данном случае буттон
на lern.javascript.ru хорошо написано по этому поводу

Roman
18.04.2016
15:21:04
ааааа, я понял о чем речь

anoru
18.04.2016
15:21:21
https://learn.javascript.ru/event-bubbling

Roman
18.04.2016
15:21:24
я думал, дело в том, что при клике на дочерний элемент не должен вызываться обработчик по задаче

Dmitry
18.04.2016
15:21:28
Почитаю спасибо. Я по клику достаю дата-атрибут.

Roman
18.04.2016
15:21:30
все правильно, да

Dmitry
18.04.2016
15:21:49
Да не должен. Спасибо всем

anoru
18.04.2016
15:22:19
может и так)