
Anatolii
27.05.2016
05:36:49
ну по сути проект уже есть, поэтому переписать его под редукс думаю будет проще, главное понять ))
может есть возможно проконтролировать или помочь?
правильно архитектуру нарисовать

Алексей
27.05.2016
05:38:59
Не знаю, что за проект, но попробовать можно будет)

Google

anoru
27.05.2016
05:56:37
смотри сразу mobx. Тем более недавно там вышел очень крупный апдейт
Всем привет! Кто-нибудь может мне помочь разобраться с Redux - капец какой-то, ни как не могу въехать
с redux в последствие одна боль и страдание )
Во первых чистый redux еще больше требует кода, во вторых в redux ducks можно смело дропать константы и сэкономить еще несколько строк кода. Но проблема остается.
Вот простейший пример - представь тебе надо открыть хеадер и закрыть хеадер. Ты не можешь это хранить в стейте,т.к. данные требуются разным компонентам.
И вот ты пишешь action creator'ы на открытие, на закрытие хедера или toggle, потом слушаешь это в редюсере и меняешь showHeader. далее валидириуешь все экшены в proptypes, достаешь их из this.props.
В итоге имеет 20-30 строк кода на 2 строки действия
через полгода работы с редаксом поймешь :D
>далее
забыл еще про константы. Тогда точно 20 строк выходит

Alex
27.05.2016
06:08:23

anoru
27.05.2016
06:08:33
mobx намного проще redux'а
у него только один минус - он стал популярен не так давно и нет норм бойлерплейтов с серверным рендерингом и прочими плюшками (только самому писать).

Alex
27.05.2016
06:12:20

anoru
27.05.2016
06:12:46
возможно и не потребуется никогда)

Антон
27.05.2016
06:16:21
мне вот показалось, что mobx это какой-то разворот к mvc или чему-то подобному
нет? действительно показалось?

Google

Tim
27.05.2016
06:16:28
mobx + typescript + vscode - норм заходит)
mobx - позволяет делать биндинг компонент к данным. Каким образом ты будешь строить само приложение уже зависит от тебя. Это может быть mvvm, может быть flux/redux/elm или что тебе задумается
Чтобы перерисовать компоненту с новыми данными:
подход реакта
this.setState({value: newValue})
подход mobx+react
value = newValue

Anatolii
27.05.2016
06:48:07
ну не наверно еще и на изучение mobx меня не хватит
хорошо бы redux без болезненно прикрутить, либо отказаться от этой затеи и прокидывать пропсы ))

Dmitry
27.05.2016
06:51:00
Кмк лучше не отказываться

lolkrp
27.05.2016
06:52:08
такой вопрос
<img src={'./images/icons/' + props.icon + '.svg'}>
вот если у меня компонента тянет иконки таким образом, можно ли как-то в вэбпаке описать что бы он их находил и тянул в dist?
или я не правильно подхожу к решению?

Алексей
27.05.2016
06:55:19
что бы иконки подтягивались, нужен же file-loader для вебпака
а там можно указать директорию

lolkrp
27.05.2016
06:57:22
ну да, только я так понял что он срабатывает для стилей или для статично указаных путей

Anatolii
27.05.2016
07:09:27
ой а разве так можно?

lolkrp
27.05.2016
07:11:23

Alex
27.05.2016
07:12:33
даже корейцы в чате )

Denis
27.05.2016
07:20:25
Есть у кого опыт интеграции управления с клавиатуры в приложение на реакте? Примерно такое https://github.com/artpi/Reactive-Compass

hlomzik
27.05.2016
07:23:31

lolkrp
27.05.2016
07:25:02

hlomzik
27.05.2016
07:25:21
webpack resolve alias
Ну и лоадеры для svg надо прикрутить
Я пользовался каким-то react-svg или что-то вроде, оно инлайнило свг в компонент, вроде было норм) но мало пробовал

Google

hlomzik
27.05.2016
07:26:32
Ну и можно просто file-loader

lolkrp
27.05.2016
07:27:06
ага ок посмотрю, спс

Leonid
27.05.2016
07:27:10
Можно иконки складывать внутрь папки компонента, писать:
<img src={require('./assets/icons/' + props.icon + '.svg')}>
file-loader сложит куда надо и вставит правильный путь
Но удобнее для иконок запилить отделный компонент, как мне кажется

Victor
27.05.2016
07:28:54
парни, пробую на 'whatwg-fetch' перейти, он почему то GET запросы не отправляет...
return (dispatch) => fetch(API_URL, {
method: 'GET',
body: query
})
POST, PATH выполняются, а GET нет, почему?

hlomzik
27.05.2016
07:29:25
Их вообще в network нет?

Victor
27.05.2016
07:29:52
нет, GET запросы вообще не появляются

Dmitry
27.05.2016
07:30:21
+1, у себя сделал компонент Icon, собрал свг спрайт из файликов и заинлайнил в начале body, а дальше через use вызывать

lolkrp
27.05.2016
07:31:38

Leonid
27.05.2016
07:34:24
Не надо инлайнить внутрь body, если это не SPA :) Кэш же
Лучше тогда через url-loader завернуть их в бандл

Dmitry
27.05.2016
07:35:47
Ну у меня spa :) Есть еще вариант юзать use со ссылкой на файл спрайта, но там нужен полифил

Leonid
27.05.2016
07:36:49
Полифил для IE да, но он вроде маленький и срабатывает только в IE
Опять же с инлайном в body — html не всегда кэшируется, плюс меняется гет-параметр подключения стиля/скрипта для обхода кэша и весь спрайт тоже грузится заново

hlomzik
27.05.2016
07:45:13

Dmitry
27.05.2016
07:46:03
Мне стыдно, но я пока впилил сборку спрайта галпом и подключил файлик хардкодом :)

Dmitry
27.05.2016
07:57:59

Alexander
27.05.2016
08:20:33
было бы круто иметь чатам команду по которой можно например FAQ глянуть

localvoid
27.05.2016
08:20:44
А если в mobx фильтровать лист из N элементов в рендере, то сколько слушателей будет неявно зарегистрировано? Например отображается по 10 элементов из 10000.

Google

S
27.05.2016
08:25:45


Aleksey
27.05.2016
08:29:55

S
27.05.2016
08:30:47
Шарить состояние UI-компонента? Я в редаксе только бизнес-данные храню

Алексей
27.05.2016
08:32:28

Aleksey
27.05.2016
08:32:47

Admin
ERROR: S client not available

Nikita
27.05.2016
08:33:25
а если сегодня нет, а завтра есть?)

localvoid
27.05.2016
08:39:05
Для 10к элементов используй react-list, а то браузер сдохнет
отображаться то будет мало элементов после фильтрации, не больше 10, но вот mobx придётся зарегистрировать N+1 слушателей, и каждый раз после инвалидации канселить всех слушателей в текущем контексте и на рендере опять создавать N+1 слушателей и регистрировать.
или может я просто плохо знаю mobx, и там есть какие-то костыли чтоб разруливать подобные кэйсы )

Nikita
27.05.2016
08:40:56
а в родителе не вариант подписку сделать?)

localvoid
27.05.2016
08:41:55
так в родителе и будет делаться подписка

Nikita
27.05.2016
08:47:08
хотя, если использовать react-list, или аналоги, можно делать подписку и в дочерних элементах. Они же по 10-20шт будут рендриться

localvoid
27.05.2016
08:47:38
а толку, если от изменения какого-то свойство может получиться что теперь нужно отобразить элемент после фильтрации
традиционно большинство проблем с производительностью в сложных приложениях на всяких дататэйблах, и традиционно системы с неявными подписками на них сосут

Nikita
27.05.2016
08:52:02
любой инструмент надо использовать прямыми руками)

localvoid
27.05.2016
08:52:51
ну так я и спрашиваю, как же такой типичный юзкэйс решать в mobx :)

Алексей
27.05.2016
09:16:52
Если у меня есть компонент, который обернут в connect, я этот connect получаю через refs в родительском компоненте. Я как то могу достучаться до самого компонента, который обернут в connect?

Google

Алексей
27.05.2016
09:29:34
Нашел
При коннекте компонента надо в объекте options передать {withRef: true}, тогда можно получить нужный коммент методом getWrappedInstance

Nikita
27.05.2016
09:33:50
Народ, что вы думаете про использование контекстов для меню? Вот у меня есть выпадающий список, у него есть разделители и вообще произвольная структура. Нормально, если SelectList будет передавать свой контекст в SelectListItem, чтобы установить текущий активный элемент, например, по ховеру?

Dmitry
27.05.2016
09:35:28
Может есть какое-то элегантное решение без использования редакс стейта? У меня есть компонент лейаута, которому можно передать хтмл для попапа. Они все отрисуются в доме обернув себя в оверлей. И внутри самого попапа мне нужно по скроллу менять его состояние, при этом оверфлоу скролл висит на оверлее и соответственно обработчик должен висеть на нем.

Andrey
27.05.2016
09:40:16

Nikita
27.05.2016
09:40:56
<SelectList start={0} end={2}>
<div>
<SelectListItem index={0} />
<SelectListItem index={1} />
<SelectListItem index={2} />
</div>
</SelectList>
вот так примерно выглядит API компонентов этих

Andrey
27.05.2016
09:46:07
Мы используем похожий подход, но тут спорно, хорошо ли это

Nikita
27.05.2016
09:46:41
согласен, и тут вопрос - какие еще есть варианты?)

Vladimir
27.05.2016
09:57:06
<SelectList start={0} end={2}>
<SelectListItem/>
<SelectListItem />
<SelectListItem/>
</SelectList>
SelectList::render(){
...
{props.children.map((c,i) => React.cloneElement(c, {index: i, isSelected: i==this.state.selected}))}
...
}

Nikita
27.05.2016
10:09:39
неа, я хочу внутри произвольную верстку
разделители, футер, например

Vladimir
27.05.2016
10:13:02
<SelectList start={0} end={2}>
<div>
<SelectListItem isSelected={this.state.selectedId==1} onClick={e=>this.setState({selectedId: 1})}/>
<SelectListItem isSelected={this.state.selectedId==2} onClick={e=>this.setState({selectedId: 2})}/>
</div>
</SelectList>
и стало быть юзаешь компонент-враппер со стейтом:)

Nikita
27.05.2016
10:14:18
а это уже слишком явно :(

Andrey
27.05.2016
10:14:30
можно биндить тогда функцию и подставлять первый аргумент )

Nikolay
27.05.2016
10:40:58
не вижу ничего криминального в связывании компонента с дочерними элементами через контекст
код получится явнее и прямолинейнее

Nikita
27.05.2016
10:44:40
API получается чище внешнее. Но внутри наоборот запутаннее и неявнее все становится)