
Anton
17.08.2016
08:26:14
Хотя чего я, всегда же можно проверить

Nikita
17.08.2016
08:26:36
вот даже не знаю(
а кстати у вебпака нельзя настроить preLoader чтобы менял файл?)

Anton
17.08.2016
08:27:14
Ну как дойдут руки - проверю)

Google

Nikita
17.08.2016
08:47:37
народ, а есть хорошие альтернативы react-router под redux?
то есть redux-router, например?

Brs
17.08.2016
08:48:55
redux-router это же обвязка над react-router

Nikita
17.08.2016
08:50:06
да, ща в доки полез - так и есть. Я могу задачу описать. У меня админка, для коллекций хочется query-параметры синкать с фильтром. А для роутов вроде /users/:id/edit максимально прозрачно фетчить данные
react-router-redux какую-то чушь делает, в редьюсер кладет стейт history. То есть из pathname самому надо параметры доставать

Vladimir
17.08.2016
09:05:50
у меня react-router-redux, в стор не обязательно лезть, он пробрасывает в пропсы контейнера обьект, в котором есть location и в нем query - собственно query параметры урла
accounts?page=60&per_page=10&sortOrder=asc
constructor(params) {
super(params);
console.log(params.location.query);
}
==
page:"60"
per_page:"10"
sortOrder:"asc"

Brs
17.08.2016
09:11:34
обычный роутер тоже пробрасывает location, query и params
и еще history и routerContext в context

Nikita
17.08.2016
09:12:15
> А для роутов вроде /users/:id/edit максимально прозрачно фетчить данные
В общем это сделал через onEnter, диспатчу экшн. Не знаю на сколько правильно, но работает

Vladimir
17.08.2016
09:18:13
на onEnter фетчитшь данные?

Олег
17.08.2016
09:22:47
вообще то все actions вешают на component will mount

Brs
17.08.2016
09:26:16
в ридми реакт роутера предлагают фетчить данные в componentDidMount

Google

Vladimir
17.08.2016
09:26:40
ну, все или не все, но инициализационный фетч я вешаю в did mount

Nikita
17.08.2016
09:26:53
ну пускай расскажут, что мне делать, если /users/123 -> /users/456 происходит)
cWRP и сравнивать?) не, спасибо

Vladimir
17.08.2016
09:27:17
на то он и компонент, не гоже ему фетчить данные за пределами )
у тебя есть componentWillReceiveProps
там диспатчишь акшин для нового айди

Nikita
17.08.2016
09:28:10
вот я и говорю, зачем мне его сравнивать?)

Vladimir
17.08.2016
09:29:52
хотябы для того, чтобы был полноценный компонент, завтра поменяешь роутер, и все поломается

Nikita
17.08.2016
09:30:19
не вижу взаимосвязи, если честно
и завтра роутер поменяешь - это как "завтра с postgresql на mysql пересядешь, и что с jsonb делать?"

Vladimir
17.08.2016
09:33:45
ну, это как один из примеров, что первое в голову пришло ) Но вообще как по мне роутер не предназначен для фетча данных для компонента

Nikita
17.08.2016
09:35:50
по мне так это открытый вопрос)

Vladimir
17.08.2016
09:41:41
ну хз-хз, интересно посмотреть на приложение, в котором для одних роутов данные фетчатся в рутовом компоненте в роуте, для других в контейнерах на didMount и тд, каша еще та будет, особенно если нужно зареюзать компоненты в других местах
а если у вас не 3-4 роута, а 10-20? рутовой компонент превратится в треш

Vladimir
17.08.2016
09:43:10
программирование не терпит сослагательных наклонений

Vladimir
17.08.2016
09:46:02
а?

Nikita
17.08.2016
09:56:35
эм, а при чем тут вообще рутовый компонент?

Vladimir
17.08.2016
09:58:31
Где роуты описаны?

Petr
17.08.2016
09:58:43
https://mobile.twitter.com/dan_abramov/status/727291046619680770

Nikita
17.08.2016
09:59:11
а какая разница?) пока в 1 файле, будет 20 роутов и это будет проблемой - в разные разнесу

Google

Anton
17.08.2016
10:34:22
Я чот даун и не пойму
Юзаю redux-thunk
До этого использовал структуру
import api from 'axios'
...
api.post('/test').then(....)
Сделал прослойку в сторе:
import api from './helpers/api'
applyMiddleware(thunk.withExtraArgument(api)),
Если делаю содержимое helpers.api
export default axios.create({..}) то все работает, но мне туда нужно передавать стейт
И при структуре хелпера
export default (data) => {
return axios.create({..})
}
получаю ошибку api.post not defined
api(data).post('/') так тоже не работает
Короче как передавать правильно данные в экстра аргументы redux-thunk'а, есть примеры?

Leonid
17.08.2016
10:42:31

Vladimir
17.08.2016
10:43:23
о, я делаю это так
function getUsers(){
return this.get('/users');
}
function myAction(){
return (dispatch, getState, {api})=>
api::getUsers().then(res=>dispatch...)
}

Anton
17.08.2016
11:01:41
эм

Anton
17.08.2016
11:01:51
Я чет разрыв шаблона получил
Пришел с магазина, запустил и все работает
какого черта

Alex
17.08.2016
11:02:26
ПОпробуйте выключить и включить, ага. Часто помогает кстати, изза всяких кешей.

Lupsick
17.08.2016
11:21:22
ангулар должен умереть
столько оверхеада

Evgeny
17.08.2016
11:21:54
Все бомбит?

Алексей
17.08.2016
11:22:36
Правильно я тоже считаю что ангуляр должен умереть! Вместо него нужно использовать Angular 2

Google

Lupsick
17.08.2016
11:23:04

Anton
17.08.2016
11:29:20
ангуляр умер, да здравствует ангуляр (2)

Vladimir
17.08.2016
11:36:04
а анг2 можно запустить без часовой настройки тайпскрипта?
типа как первый - вставил скрипт на страницу и полетели?
мне внезапно понравился Vue для маленькой лабуды всякой

Admin
ERROR: S client not available

Evgeny
17.08.2016
11:37:07
Я имею в виду ТЫ РЕАЛЬНО ВЕРИШЬ, ЧТО АНГУЛАР МОЖНО ЗАПУСТИТЬ ЗА 5 МИНУТ?

Vladimir
17.08.2016
11:38:18
я вот и спрашиваю, можно ли:)

Anton
17.08.2016
11:42:34
ну если какой-нибудь стартер кит юзать

blkmrkt
17.08.2016
11:42:43
вопрос про MobX: вот деляю я интернет-шоп с тыщами продуктов, и хочу кешировать эти продукты по SKU в объекте стейта. Проблема с геттер ф-ей, делаю вот так вот, но mobx ругается что нельзя изменять стейт во время evaluation, что вроде бы и правильно, но не знаю как обойти. На №19 линии я делаю что-то не так
окей понял, внутри рендера этого нельзя делать


Denis
17.08.2016
13:01:09
здарова
вопрос по fetch и es6 промисам
хочу вызывать массив fetch запросов последовательно
для этого соединяю цепочку вызовов в reduce
export const callPromisesInSeries = (list) => {
var p = Promise.resolve();
return list.reduce((pacc, fn) => {
return pacc = pacc.then(fn)
}, p);
}
оно работает, но в конечном итоге возвращает респонс только последнего запроса
мне же надо в конечном итоге получить ответы всех запросов, в том числе если какие-то зареджектились, продолжить отправление следующего но в результате получить ответы всех, и удачных запросов и зареджершных
догадываюсь что перед каждым последующим запросом нужно в промис передавать ответ предыдущих через Promise.all([]), но пока еще играюсь с синтаксисом
мб кто-то уже делал такое и скинет правильный вариант?

Vladimir
17.08.2016
13:02:41
promise.all не твоё

KlonD90
17.08.2016
13:04:58
ну вообще если ты делаешь chain то это не совсем правильно. первый же reject прервет его

Alexander
17.08.2016
13:06:20
@blkmrkt а что за шрифт? Что-то знакомое, но никак не могу вспомнить...

blkmrkt
17.08.2016
13:06:47

KlonD90
17.08.2016
13:06:55
тебе нужно в then передавать и то и другое в этом случае и копить результаты в некий агрегатор

Alexander
17.08.2016
13:07:11
Спасибо! Оказывается, что-то новое

KlonD90
17.08.2016
13:07:15
а этот агрегатор как раз вернуть как результат

Google

KlonD90
17.08.2016
13:08:31
в then ты сейчас передаешь только обработчик для resolve а тебе нужен обработчик и для reject

Denis
17.08.2016
13:09:02
именно под этим агрегатором я подразумевал Promise.all([])
как вот тут в последнем примере 2го раздела
http://www.datchley.name/promise-patterns-anti-patterns/

KlonD90
17.08.2016
13:09:24
Promise.all делает это в паралель же
а ты ходишь последовательно нет?

Denis
17.08.2016
13:10:05
promise.all не должен заменить reduce
он должен запоминать значения предыдущих вызовов
firstThingAsync()
.then(function(result1) {
return Promise.all([result1, secondThingAsync(result1)]);
})
.then(function(results) {
// do something with results array: results[0], results[1]
})
.catch(function(err){ /* ... */ });
пример с того сайта

マイク
17.08.2016
13:10:26

KlonD90
17.08.2016
13:12:19
не то чтобы я такой подход не использовал - но это больше подходит под конкретный случай типа ты в первой асинхронной штуки все таки что-то делаешь тогда, а в общем случае хз стоит ли хотя в принципе под идеологию коммуникации подходит

Denis
17.08.2016
13:15:59
в скайповском реакт чате сбросили
https://goo.gl/LJaLqt

Vladimir
17.08.2016
13:27:20
хорошее решение

Ҫѐҏӗѫӑ
17.08.2016
14:05:02
можно и параллельно
const promise1 = Promise.resolve(1);
const promise2 = Promise.resolve(2);
const promise3 = Promise.reject(3);
const promise4 = Promise.resolve(4);
const promises = [promise1, promise2, promise3, promise4];
Promise.all(promises.map(p => p.catch(_=>_))).then(console.log.bind(console));

Nikita
17.08.2016
14:13:04
жалко нет модульного bluebird)

Ҫѐҏӗѫӑ
17.08.2016
14:14:31
есть пропозалы с полифиллами для Promise.finally и Promise.try