
Anatoly
30.10.2017
07:44:51
Саги очень удобно с этим справляются, как мне кажется

Oleg
30.10.2017
07:46:09
отдельный вопрос - размышление:
есть запрос к апихе, ответ зависит от параметра (например автокомплит), и этот запрос вызывают несколько компонентов в разных частях приложения, с разными параметрами. Как лучше отдельно для каждого запроса рассчитывать состояние, тот же isFetching? Только созданием нескольких редьюсеров?

Alexey
30.10.2017
07:46:30

Dmitry
30.10.2017
07:46:41
На мой взгляд axios это более лучший выбор чем fetch. Очень гибкий, простой в настройке под любые извращенные запросы. Для меня лично очень удобно оказалось возможность нескольких конфигураций для разных API, возможность интерсептить запросы итд

Google

Oleg
30.10.2017
07:47:06

Dmitry
30.10.2017
07:48:15
Преимуществ очень много, на самом деле. Если простое приложение, с простым API на бэкенде достаточно fetch использовать и вобще не париться, но лично я всегда его использую(axios)

Alexey
30.10.2017
07:48:23
2 вопроса возникает в такой связке:
1) имеет ли смысл сохранять объект запроса и ответа в хранилище, или только data?
2) имеется в большом количестве шаблонный код обновления состояния на каждый запрос, обработка начала запроса, успеха и ошибки (стандартные isFetching, error, data) - что вы используете, для красоты и уменьшения кода?
Я, например, даже thunk не пользуюсь, предпочитая Redux-reducers, которые завязаны на "стандарт" Redux-actions. Ну и просто написал свой reducer, который обновляет состояние в store, передавая ему имя action

kana
30.10.2017
07:48:41
Это все еще не должно быть в сторе. Стор - не объект с временной информацией, это состояние приложения, которое потенциально можно скопировать на другой клиент и получить ту же картину. Скопировав объект запроса или токен, ты ничего не получишь

Anatoly
30.10.2017
07:49:38

Alexey
30.10.2017
07:49:44
Я думаю, тут граница может быть размыта, на самом деле...

Anatoly
30.10.2017
07:50:27
О, вот Женя может грамотно рассказать

Oleg
30.10.2017
07:51:07

Evjeni
30.10.2017
07:52:37
Господа, есть такой вот mapStateToProps, где лучше всего вычислять countOfGuests и countOfCoupled?
const mapStateToProps = (state) => {
const { guestList } = state
return {
guests: guestList.guests,
countOfGuests: guestList.guests.length,
countOfCoupled: guestList.guests.filter((item) => item.coupled === true).length
}
}

kana
30.10.2017
07:52:42
писать свои фабрики редьюсеров, которые генерят за тебя такие редьюсеры и экшоны, никто не мешает, готовых решений полно

Evgeny
30.10.2017
07:53:58
Про редакс

Google

Evgeny
30.10.2017
07:54:11
https://medium.com/@evgeny.rodionov/6a95feefcf29

Eugeniy
30.10.2017
07:54:16

Evgeny
30.10.2017
07:55:01

Oleg
30.10.2017
07:59:01
хелперы хелперами, но обработка статусов различных запросов меня беспокоит, потому что выглядит вот-так:

Evgeny
30.10.2017
07:59:17
Эээ

Oleg
30.10.2017
07:59:30
и огромная обработка каждого case

Evgeny
30.10.2017
08:00:22
В редьюсере нужно хранить _ДАННЫЕ_
А не промежуточные состояния их

Oleg
30.10.2017
08:00:28
это пример к обработке запросов условного api/orders/:feature

Anatoly
30.10.2017
08:01:00
Выглядит неправильно

Oleg
30.10.2017
08:01:02

Viktor
30.10.2017
08:01:07

Evgeny
30.10.2017
08:01:19
Если ты знаешь зачем ты что-то делаешь, базару ноль

Anatoly
30.10.2017
08:02:50
По ощущениям ты пытаешься хранить состояние запросов вместо состояния приложения, фетчинг и эррор - результаты запросов, а все остальное просто разные экшены меняющие эти два поля

Evgeny
30.10.2017
08:02:58
+

Oleg
30.10.2017
08:03:37
а как же http://redux.js.org/docs/advanced/AsyncActions.html#async-actions , стандартная обработка асинхронных действий

Google

Alexey
30.10.2017
08:05:07
https://medium.com/@evgeny.rodionov/6a95feefcf29
Ну про connect вообще логично. Он же для этого и создан.
Момент с чистым dispatch интересный.
Момент с complexes и разбивкой на модули не сильно понятен. Кажется, что это лишь дело вкуса.
UI state в store иногда сильно упрощает взаимодействие между разными компонентами React. Особенно в случае расположения в разных ветвях дерева, как раз избавляя от прокидывания свойств.
Для меня правило такое:
1. Если ui-state влияет на другие компоненты, не являющиеся 1 уровня предком/потомком - то в store

Anatoly
30.10.2017
08:05:10
Ну так изФетчинг это у тебя состояние приложения, но это не значит что у тебя на каждый запрос своё состояние должно быть)

Evgeny
30.10.2017
08:05:24

Viktor
30.10.2017
08:06:40
Вопрос, есть у вас компонент-функция и тут вы осознаете что нужно добавить state или что-то из lifecycle- будете переписывать на класс или враппер делать?

Oleg
30.10.2017
08:06:49
хотя, выглядит логичным показывать прелоадер по умолчанию в соответствующем компоненте, и убирать его, как только появятся данные

Александр
30.10.2017
08:09:25

Alexey
30.10.2017
08:12:53
Без обид. На мой взгляд программирование - это хорошая вещь, чтобы быстро и эффективно эксперементировать. Это позволяет находить оптимальные конфигурации каждого конкретного случая. В особенности, если мы не говорим о фреймворках, а скорее о парадигмах (в плане React)

Oleg
30.10.2017
08:18:55

Anatoly
30.10.2017
08:20:49
В некоторых фреймворках лоадинг - это число говорящее о количестве идущих запросов, если у тебя троттлер один на все приложение - удобно

Group Butler
30.10.2017
08:21:26
Evgeny, this type of media is not allowed in this chat.
(1/3)

Vladimir
30.10.2017
08:21:34
Лол

Evgeny
30.10.2017
08:21:44
Огонь

Alexey
30.10.2017
08:22:27
Огонь
Неужели распознавание голоса все ещё плохо работает?

Evgeny
30.10.2017
08:24:07
Моя речь полна терминов и англицизмов

Oleg
30.10.2017
08:27:02
как раз так я и делаю, в статье подробнее описано, ближе к концу блок про апи - https://habrahabr.ru/post/341132/

Google

Evgeny
30.10.2017
08:27:34
Фу хабр

Oleg
30.10.2017
08:27:39
на typescript кучу экшенов плодить не люблю, так как добавляется лишняя строка

Александр
30.10.2017
08:36:28
Всем привет! Ай нид хелп. Делаем проект в связке Django Rest Framework - React,Redux,Router. Доступ к api осуществляется с помощью axios. Авторизация осущевляется с помощью токена. Столкнулись с проблемой неправильного кэширования данных, а именно, когда мы логинимся под пользователем и получаем данные по полученному токену все хорошо, но когда делаем logout, и заходим под другим пользователем приходят данные предыдущего пользователя, самое интересное, что каким то образом все кэшируется в браузере, какие только заголовки на отключения кэширования не пробовали, и система работает только при отключенном кэше в браузере. Может кто сталкивался?


Ilya
30.10.2017
08:37:13
Всем привет! Ай нид хелп. Делаем проект в связке Django Rest Framework - React,Redux,Router. Доступ к api осуществляется с помощью axios. Авторизация осущевляется с помощью токена. Столкнулись с проблемой неправильного кэширования данных, а именно, когда мы логинимся под пользователем и получаем данные по полученному токену все хорошо, но когда делаем logout, и заходим под другим пользователем приходят данные предыдущего пользователя, самое интересное, что каким то образом все кэшируется в браузере, какие только заголовки на отключения кэширования не пробовали, и система работает только при отключенном кэше в браузере. Может кто сталкивался?
redux-persist?

Александр
30.10.2017
08:37:32
Это че за штука?
redux-persist?

Max
30.10.2017
08:37:39
Всем привет! Ай нид хелп. Делаем проект в связке Django Rest Framework - React,Redux,Router. Доступ к api осуществляется с помощью axios. Авторизация осущевляется с помощью токена. Столкнулись с проблемой неправильного кэширования данных, а именно, когда мы логинимся под пользователем и получаем данные по полученному токену все хорошо, но когда делаем logout, и заходим под другим пользователем приходят данные предыдущего пользователя, самое интересное, что каким то образом все кэшируется в браузере, какие только заголовки на отключения кэширования не пробовали, и система работает только при отключенном кэше в браузере. Может кто сталкивался?
заголовки + вкладка network в хроме в помощь


Oleg
30.10.2017
08:37:42
Всем привет! Ай нид хелп. Делаем проект в связке Django Rest Framework - React,Redux,Router. Доступ к api осуществляется с помощью axios. Авторизация осущевляется с помощью токена. Столкнулись с проблемой неправильного кэширования данных, а именно, когда мы логинимся под пользователем и получаем данные по полученному токену все хорошо, но когда делаем logout, и заходим под другим пользователем приходят данные предыдущего пользователя, самое интересное, что каким то образом все кэшируется в браузере, какие только заголовки на отключения кэширования не пробовали, и система работает только при отключенном кэше в браузере. Может кто сталкивался?
кэшируются куки?

Александр
30.10.2017
08:37:57
кэшируется сам запрос
причем именно на стороне клиента

Ilya
30.10.2017
08:38:20

Alex
30.10.2017
08:38:33
можно сделать отдельную ветку в сторе с массивом pending, если массив пустой никаких операций не происходит, если в нём что-то есть, соотвественно, что-то происходит, если добавить какую-то мету можно будет создавать progress / loading ui элементы с фильтрами, естественно это уже не state данные. + как вариант можно написать свой класс, к нему мидлвэр в стор, и селектор через реселект, тогда редакс не юзается

Oleg
30.10.2017
08:38:50

Alex
30.10.2017
08:39:12
в идеале это должен быть локальный стейт, но доставить информацию в несколько лоадеров/прогресс баров как-то сложно без connect и redux

Александр
30.10.2017
08:40:44

Vladimir
30.10.2017
08:41:49
скинь заголовки запроса
и ответа

Google

Александр
30.10.2017
08:42:06

gravizappa
30.10.2017
08:49:56
ребят, а можете подсказать, почему себя webpack dev server так ведет: если открываешь просто хост без пути, то отдает html c инклюдами с / в начале. а если открываешь хост с каким либо путем типа /foo/bar/, то / в инклюдах магически пропадает и путь получается относительным и соответственно нихрена не подгружается. historyApiFallback стоит, publicPath тоже. где я что промудил?


Edward
30.10.2017
08:53:37
скинь заголовки запроса
Request Method:GET
Status Code:200 OK (from disk cache)
Remote Address:54.246.117.63:443
Referrer Policy:no-referrer-when-downgrade
Response Headers
Access-Control-Allow-Origin:*
Allow:GET, PUT, HEAD, OPTIONS
Cache-Control:max-age=600
Content-Language:ru
Content-Length:243
Content-Type:application/json
Date:Mon, 30 Oct 2017 08:50:12 GMT
Expires:Mon, 30 Oct 2017 09:00:12 GMT
Server:gunicorn/19.4.5
Vary:Accept, Accept-Language, Cookie
Via:1.1 vegur
X-Frame-Options:SAMEORIGIN
Request Headers
Provisional headers are shown
Accept:application/json, text/plain, */*
Origin:http://localhost:3000
Referer:http://localhost:3000/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
вторая строчка
ответ берется из кэша

Vladimir
30.10.2017
08:54:34
токен выпили
из сообщения

Edward
30.10.2017
08:54:56
?

Vladimir
30.10.2017
08:55:12
max-age=600

Edward
30.10.2017
08:55:56
предлагаешь убрать?

Vladimir
30.10.2017
08:56:06
да

Ilya
30.10.2017
08:56:11
no-cache пробовал?

Edward
30.10.2017
08:58:22
пробовал, прописывал его в запросе в axios'е, корс вроде ругался

Vladimir
30.10.2017
08:58:38
это сервер
сервер отправляет cache-control
И поэтому у тебя из кэша достается этот ответ

Александр
30.10.2017
08:59:30