@react_js

Страница 329 из 5115
Vladimir
26.07.2016
11:18:42
ок, так проще? connect( ... dispatch=>({ onClick: dispatch=>dispatch(e=>dispatch=>fetch('google.com').then(()=>dispatch('CLICKED'))) }) )(MyButton)

короче вопрос такой. как минимальными средствами сделать асинхронный экшн?

Dmitry
26.07.2016
11:32:36
Ну да, в общем случае примерно так и выглядит )) onClick = () => dispatch => fetch('google.com').then(() => dispatch({ type: 'LODED' })); connect( dispatch => ({ onClick: (...args) => dispatch(onClick.apply(null, args)) }) )

Короче bindActionCreators тебе нужно

Google
Aleh
26.07.2016
11:34:04
function someAsyncAction(dispatch) { doSomeAsync().then(r => dispatch({type: "async", r}); } connect(null, dispatch => ({ asyncAction: () => someAsyncAction(dispatch) }))(Component) не?

ну в компоненте соответственно this.props.asyncAction()

Dmitry
26.07.2016
11:37:23
Но так ты не сможешь передать параметры функции

Можно конечно вторым и более аргументом, но каждый раз прокидывать dispatch как-то не айс ) В редаксе же все уже продумали

Вручную никто не биндит экшенкреаторы

Aleh
26.07.2016
11:39:04
это если их надо сложить в диспатч

а здесь не надо

можно карированием сделать const someAsyncAction = dispatch => (all, your, args) => doSomeAsync(all, your, args).then(dispatch) и тогда в mapDispatch будет проще connect(null, dispatch => ({ asyncAction: someAsyncAction(dispatch) })

Алексей
26.07.2016
11:42:52
что бы не париться за аргументы, можно и так делать const someAsyncAction = dispatch => (...args) => doSomeAsync(...args).then(dispatch)

Aleh
26.07.2016
11:43:19
ну это если они совпадают, мало ли надо еще какую фигню делать

типа +1 или склеить

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

Алексей
26.07.2016
11:44:04
ну я так понял, тут идет проброс и склеивать лучше все таки в самой ф-ции doSomeAsync

Google
Aleh
26.07.2016
11:45:21
вообще я бы так не делал, но вопрос был в том как можно это сделать, вот ответ)

Den
26.07.2016
11:49:08
А что такое вообще async action? Не надуманная ли это штука?

DenJel
26.07.2016
11:49:45
childRoutes: [ { path: comp1, getComponent( nextState, cb ) { require.ensure( [], ( require ) => { cb( null, require( comp1 ).default ); }, comp1 ); } }, { path: comp2, getComponent( nextState, cb ) { require.ensure( [], ( require ) => { cb( null, require( comp2 ).default ); }, comp2 ); } }, { path: comp3, getComponent( nextState, cb ) { require.ensure( [], ( require ) => { cb( null, require( comp3 ).default ); }, comp3 ); } } ] Здравствуйте, разбираюсь с Code spliting. Делаю child роуты через require.ensure в react-router'e. Comp1 и Comp3 нормально собираются в отедльные чанки вебпаком, а Comp2 собирается в общую сборку. Следовательно никакой динамической подгрузки нет. Comp1 и Comp3 тупые компоненты без стейта, а Comp2 фактически приложение со своим стором: вот такой код примерно я requir'ю: const Comp2 = () => { return ( <Provider store={ store }> <Root /> </Provider> ); }; Comp2.displayName = Comp2; export default Comp2; Что я пропустил может кто сталкивался?

Илья
26.07.2016
12:08:13
Хай! а как то можно заставить работать запись const {...rest}=this.props вместе в typescript?

Aleh
26.07.2016
12:10:30
есть только в реакт шаблонах <Blabla {...props} />

Илья
26.07.2016
12:13:33
это печально

Den
26.07.2016
12:19:31
что-то, что сделает dispatch потом)
То есть что-то, что задиспатчит action потом

Тогда что такое action?

DenJel
26.07.2016
12:20:56
Vladimir
26.07.2016
12:21:08
вот блин, философия началась:)

Oleh
26.07.2016
12:21:23
это по сути обьект, который несет в себе название события и полезную нагрузку

Vladimir
26.07.2016
12:21:49
короче actionCreator вполне может жрать диспатч, если не использовать bindActionCreators

и тогда танк не нужен

Den
26.07.2016
12:29:18
Я просто хочу разобраться. Async actions обсуждаются уже давно и эта тема никак не исчерпает себя.

Ни танк, ни сага мне не нравятся. actionCreator должен создавать action, а reducer должен "редьюсить". Прошу прощения за тавтологию

Dmitry
26.07.2016
12:34:06
В сагах же так все и есть

Den
26.07.2016
12:38:07
Разве? Если правильно помню, то сайдэффекты описываются в редьюсере, не?

Brs
26.07.2016
12:38:50
ты путаешь с лупом, кажется

Google
DenJel
26.07.2016
12:39:06
Разве? Если правильно помню, то сайдэффекты описываются в редьюсере, не?
про сагу не знаю, но в танке сайд эффекты описываются в actionCreatore

Dmitry
26.07.2016
12:39:14
Нет, там просто подписываешься на запуск экшена и дальше в генераторе запускаешь все остальные нужные экшены

Den
26.07.2016
12:42:02
про сагу не знаю, но в танке сайд эффекты описываются в actionCreatore
В танке actionCreator вообще не создаёт action'ы. Такой себе лёгкий грязный хак

Да, может с лупом путаю

Нужно ещё раз сагу посмотреть

DenJel
26.07.2016
12:43:40
В танке actionCreator вообще не создаёт action'ы. Такой себе лёгкий грязный хак
а в чем собственно проблема то? Да ты их там напрямую диспатчишь

return {} vs dispatch( {} ), да грязновато, но все понятно

Den
26.07.2016
12:58:59
да, согласен, у redux-saga хороший подход. Хоть и слишком наворочено выглядит.

Vladimir
26.07.2016
13:04:27
возвращаясь к бойлерплейту, в него надо самый наглядный подход, чтобы надо было читать док по минимуму

DenJel
26.07.2016
13:41:28
может кто по requre.ensure проконсультировать?

Konstantin
26.07.2016
13:44:14
Denjel, у тебя в вебпак конфиге скорее всего подключён AggresiveMergePlugin который склеивает чанки, чтоб оптимизировать их подгрузку. Хотя, как вариант, можно явно указывать в какой чанк какой компонент должен идти, вот здесь пример: https://github.com/kriasoft/react-static-boilerplate/blob/master/routes.json#L13 (на базе кастомного рутинга)

DenJel
26.07.2016
13:46:20
Denjel, у тебя в вебпак конфиге скорее всего подключён AggresiveMergePlugin который склеивает чанки, чтоб оптимизировать их подгрузку. Хотя, как вариант, можно явно указывать в какой чанк какой компонент должен идти, вот здесь пример: https://github.com/kriasoft/react-static-boilerplate/blob/master/routes.json#L13 (на базе кастомного рутинга)
да не я разобрался уже с той проблемой я там ступил со старых времен импорт не удалил) забыл совсем про него, но не суть, плагин не подключен) мне бы понять как requre.ensure работает? я сейчас на WDS UI делаю. Сейчас все работает шикарно грузится index.html, bundle, по роутам происходит подгрузка чанков ajax'ом

только вот мне бы внутри понять как бандл узнает куда ajax делать? при перезаливке всего это на боевой сервер будет ли это работать? или это магия WDS?

И если да как это настраивается

и еще вопрос по сборке нужно ли выносить vendor'ы типо react react-dom в отдельный чанк? В каких случаях это делается?

Alex
26.07.2016
13:54:28
когда у тебя vendor библиотеки делятся между абсолютно всеми чанками.

DenJel
26.07.2016
13:56:51
когда у тебя vendor библиотеки делятся между абсолютно всеми чанками.
а в чем выгода от этого? вот допустим на примере реакта? можно вынести его в вендор, а можно оставить в bundle.js

Dmitry
26.07.2016
13:56:53
Google
Alex
26.07.2016
13:57:56
а в чем выгода от этого? вот допустим на примере реакта? можно вынести его в вендор, а можно оставить в bundle.js
Рассчет на то что ты бьешь свое приложение на логические единицы чтобы не грузить сразу все приложение и обеспечить быструю загрузку, например текущей страницы (если ты бьешь приложение по страницам) а вендоры грузятся в любом случае так как юзаются либо везде либо почти везде.

Чтобы вендоры хранились отдельно от чанков, в таком случае разные чанки не будут дублировать вендорные библиотеки.

Dmitry
26.07.2016
13:58:18
Поэтому я не выношу вендорные библиотеки по умолчанию в отдельный бандл

Alex
26.07.2016
13:58:33
С ними возни много имхо.

Dmitry
26.07.2016
13:58:36
require.ensure сам сольёт общеиспользованное в главный

Alex
26.07.2016
14:01:01
В этом не всегда есть смысл, но когда это нужно такой функционал есть, тем вебпак и крут

DenJel
26.07.2016
14:02:01
А у тебя на отдельном домене будет лежать .js и/или .css? Ну то есть как ты будешь подключать их в .html
все на одном домене, подрублю бандл и ксс в html, вот пожтому и спрашиваю суть динамической подгрузки, надо ли с этим возиться или вебпак сам все сделает

Admin
ERROR: S client not available

Dmitry
26.07.2016
14:07:45
Ну там в настройках publicPath влияет на это

в настройках вёбпака

Владимир
26.07.2016
14:07:52
все на одном домене, подрублю бандл и ксс в html, вот пожтому и спрашиваю суть динамической подгрузки, надо ли с этим возиться или вебпак сам все сделает
вендоры выносятся в 1 файл для кеширования, для удобной отладки кода, что бы в файлах чанков не было лишнего

Dmitry
26.07.2016
14:08:14
Откуда именно у тебя будут тягаться файлики

Т.е. если у тебя оно будет в domain.my/staic/1.1.js То, publicPath должен быть такой '/static/' вроде как

В доках написано

Ну и собственно когда на сервер будешь класть всё это - ты должен убедиться, что они там есть :)

Задеплоить их туда, где они должны быть

DenJel
26.07.2016
14:10:13
чето меня прорвало на вопросы сегодня) извиняйте) А если тебе надо 2 перезагружаемых dev сервера: один для серверной части приложения, другой для UI. Я вчера ковырялся с этим, в итоге пришел к выводу сделать express сервер через nodemon для первого и webpack-dev-server для второго, и в index.html который отдаешь с экспресса подключать bundle с webpack-dev-server'a. Впринципе схема рабочая, но не очень адекватная, в react-starter-kit это делается в рамках одного процесса ( с дочерними наверное ), я вчера пытался смотреть, но понял что без бутылки водки там не разобраться. Так вот есть адекватные примеры у кого по настройке такого окружения? Если тебе надо и серверную и UI часть в одно время дебажить, чтобы они перезагружались при изменениях сами

Alex
26.07.2016
14:20:18
сделай файлик который будет два экспресса на разных портах запускать

Google
DenJel
26.07.2016
14:26:59
я делал так вчера, ставил dev-middleware. Там вся соль в сборке UI если back процесс можно спокойно перезапустить при изменении, то UI процесс перезапускать нельзя, а то он занового начинает собирать фронт и это оочень долго, надо чтобы он постоянно включен был, впринципе да не сложно запустить 2 процесса наверно так и сделаю, прост интересно как гуру такие вопросы решают в рамках одного процесса на ноде)

Alex
26.07.2016
14:37:21
У меня бэкенд вообще не на ноде, просто открываю в соседней вкладке терминала

Можно вот так: http://stackoverflow.com/questions/30950032/how-can-i-run-multiple-npm-scripts-in-parallel

Владимир
26.07.2016
14:43:49
Есть кто в Epam работает?

Konstantin
26.07.2016
15:13:36
Как вам новое название для проекта https://twitter.com/koistya/status/757955779458654208

Andrey
26.07.2016
15:14:49
отличное название, странно, что не заняли уже)

Dmitry
26.07.2016
15:38:49
https://facebook.github.io/react/blog/2016/07/22/create-apps-with-no-configuration.html а эту штуку кто-нибудь смотрел? Все хорошо там?)

S
26.07.2016
15:48:38
А тут сидят чуваки из kriasoft, авторы react-starter-kit?

Владимир
26.07.2016
15:49:14
Вон Костя выше

Konstantin
26.07.2016
15:54:21
Yeoman пока не умеет билдить и запускать проект с поддержкой code splitting, async chunk loading, HMR и т.п.

S
26.07.2016
15:55:09
умеет, yoman это система для дистрибуции бойлерплейтов, как там внутри напишешь, так и будет работать

Alex
26.07.2016
15:59:37
Всем привет! Народ, подскажите, пожалуйста, как вообще принято писать поджинацию на реакте?

Vladimir
26.07.2016
16:00:21
"паджинация", как и везде

Roman
26.07.2016
16:00:52
react-virtualized / react-list

Vladimir
26.07.2016
16:03:07
а вообще - кладешь в стейт текущую страницу, и в зависимости от нее делаешь запросы

Nikita
26.07.2016
16:13:32
кто-то юзает package.json внутри компонентов, вместо index.js?

https://github.com/benmosher/eslint-plugin-import/issues/458 - поддержите issue, а то ща наворотят(

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