
Evjeni
23.08.2016
07:50:10
пишу коды на css

Anonymous
23.08.2016
08:40:15
Всем привет. Наверное мой вопрос уже много раз поднимался. Но все же. Есть компонента, у нее в componentWillMount и в componentWillReceiveProps код, который смотрит на props.params.userId и стреляет экшен на фетчинг юзера. Потом экшен грузит юзера и он появляется в сторе. Проблема в том, что этот экшен успевает выстрелится много раз.
Я понимаю, что здесь 2 проблемы. Первая это то, что не нужно в componentWillReceiveProps делать таих вещей, но где тогда? как контейнер должен отреагировать на то, что в params появился новый юзер и зафетчить его?
Вторая это то, что нужно как-то помечать юзера как того, который загружается.
Как мне лучше всего быть в этой ситуации? Спасибо

hlomzik
23.08.2016
08:45:21
debounce?

Lupsick
23.08.2016
08:47:38

Google

Lupsick
23.08.2016
08:47:54
сравнивай новые и старые параметры в componentWillReceiveProps

Vladimir
23.08.2016
08:51:23
ну да, можно проверить новый и старый айди юзера, и фетчить только если они разные

Anton
23.08.2016
08:56:45
Кстати, насчёт хантинга, у меня тут в дельта окрестности очень агрессивно пылесосит Атлассиан. Задело кого?

Andrey
23.08.2016
08:57:22
в дельта?

Anton
23.08.2016
09:03:02

Sergey
23.08.2016
09:03:23

Anonymous
23.08.2016
09:05:11
почему он у тебя выстреливается много раз?
Получается, что там паралельно меняется состояние стора ( подгружается другая инфа асинхронно) , контейнер подписан на это состояние и у него выстреливает componentWillReceiveProps
А код в componentWillReceiveProps ничего не знает про то, ресурс загружен или нет. И повторно дергает экшен

Brs
23.08.2016
09:05:53
у меня колллега-джавист в атлассиан в прошлом году уехал
но он вроде сам инициативу проявил

Lupsick
23.08.2016
09:06:35

Anonymous
23.08.2016
09:07:02
Да, но что я там могу проверить? Я там вижу только props.params.userId

Lupsick
23.08.2016
09:07:39

Google

Lupsick
23.08.2016
09:07:47

Anonymous
23.08.2016
09:08:16
но компонента ничего не знает про юзера. Она не подписана на него.

Lupsick
23.08.2016
09:08:44
я не понимаю короче

Anonymous
23.08.2016
09:08:44
получается, мне нужно чтобы компонента или проверяла, что user существует в сторе и не вызывала экшен или помечать юзера как loading и чтобы экшен не выстреливал загрузку внутри себя

Lupsick
23.08.2016
09:09:01
ну хоть так

Anonymous
23.08.2016
09:09:34
У меня есть компонента AppLayout. она смотрит, что params.userId от раутера получена и триггерит загрузку юзера.
Это корневой лэйаут
Я бы с удовольствием засунул бы загрузку юзера еще куда-нибудь выше

Lupsick
23.08.2016
09:10:29
redial и засунешь в роут
https://github.com/ifokeev/ticket-api/blob/master/client/src/components/pages/TicketPage.jsx#L28

Anonymous
23.08.2016
09:11:11
Воу! https://github.com/markdalgleish/redial . Это то что нужно
Спасибо огромное :)

Lupsick
23.08.2016
09:11:24
смотри код

Anonymous
23.08.2016
09:12:05
Да, вижу. То что мне и нужно. Подгрузить юзера перед тем как все отрендерится.
Спасибо :) !

Alex
23.08.2016
09:36:13
А тут есть активность?
Кто как решает такую проблему:
Когда рендеринг делается на клиенте, вместе с <div id=«app»></div>
нужно отправлять данные для рендеринга.
Я это делаю путём прогона их через JSON.stringify и помещения в layout-шаблон в
<script>window.app = {data}</script>
Вроде ок, но проблема дальше,
Когда добавляется рендеринг на сервере, то получается дублирование пересылаемых по каналу данных

Sergey
23.08.2016
09:38:08
O_o

Lupsick
23.08.2016
09:45:31


Alex
23.08.2016
09:51:31
Или например такая проблема:
нужно в тексте заменить переносы строки на <br/>
но так сделать нельзя и приходится оборачивать в div’ы, что сильно увеличивает размер трафика и захламляет
content.split(/\n/).map(line => <div>{line}</div>)
может быть есть хитрости как это обойти?

Google

Lupsick
23.08.2016
09:52:49
оно незначительно увеличивает размер трафика

Roman
23.08.2016
09:54:38
вопрос по организации redux-лапши
ducks использует кто-нибудь?
а если нет, то почему? может какую особую организационную структуру реализовали у себя?
https://medium.com/@scbarrus/the-ducks-file-structure-for-redux-d63c41b7035c#.ilcano822
https://github.com/erikras/ducks-modular-redux

Dmitry
23.08.2016
09:54:39
И ничего не надо изменять в исходном тексте

Михаил
23.08.2016
09:55:54
ребят, а как правильно анимировать добавление в начало списка? пробую сделать с react-transition-group - работает только если давать элементам списка рандомный key

Alex
23.08.2016
10:04:34
Вторую проблему решил с помощью createElement:
React.createElement('div',null, poem.content.split(/\n/).reduce((a, l) => [...a, l, <br/>],[]))

Dmitry
23.08.2016
10:07:36

Alex
23.08.2016
10:08:05
нет, посмотрю на телефоне, telegram for mac видимо глючит(

Ҫѐҏӗѫӑ
23.08.2016
10:08:20

Alex
23.08.2016
10:08:25
нет, css-решение не подходит, я знаю о нём

Ilya
23.08.2016
10:08:26

Ҫѐҏӗѫӑ
23.08.2016
10:08:32
Австралия не нужна

Ilya
23.08.2016
10:08:37
версия для мака говно

Alex
23.08.2016
10:08:45
я делаю жёсткую минификацию html

Ҫѐҏӗѫӑ
23.08.2016
10:08:50
но это давно было и не на реакт

Alex
23.08.2016
10:08:55
хорошо)
почему? там json без html

Lupsick
23.08.2016
10:15:04

Alex
23.08.2016
10:15:36
в каком смысле легче? )

Google

Lupsick
23.08.2016
10:15:48

Alexander
23.08.2016
10:16:04
друзься, а есть бабел лоадер что бы превращать yaml или json в react компоненты? Вместо jsx. Было бы интересно глянуть как это выглядело бы

Alex
23.08.2016
10:17:47
json в react может БЭМ превращать, но это ещё не выпущено в опенсорс, но будет вот-вот

Alexander
23.08.2016
10:18:54
ну это наверно как-то завязано на всю это бэм методологию. Мне интересно просто что бы вместо XML based был YAML based синтаксис

Alex
23.08.2016
10:20:13
не встречал, но ты можешь написать свой конвертор в React.createEvement, кажется не очень сложная задача если не учитывать разные корнер-кейсы

Alexander
23.08.2016
10:20:40
я понимаю что его можно написать))

Alex
23.08.2016
10:21:32
А это никто проблемой не считает?
> Когда добавляется рендеринг на сервере, то получается дублирование пересылаемых по каналу данных
получается и в window.INITIAL_STATE добавляются данные и на странице их отображение.

Admin
ERROR: S client not available

Lupsick
23.08.2016
10:22:09
если у тебя уже есть window.INITIAL_STATE, то второй раз оно не грузится

Alex
23.08.2016
10:23:54
Да, но я не про повторную загрузку INITIAL_STATE, а про первичную.
Думаю не делать передачу INITIAL_STATE если рендеринг делается на сервере

Lupsick
23.08.2016
10:24:20
почитай код который я кинул

Egor
23.08.2016
10:24:21
имеется ввиду, что в html странице, которую отдает сервер есть html с данными и json с ними же

Alex
23.08.2016
10:24:34
да

Lupsick
23.08.2016
10:24:35
я ему это кинул второй ссылкой

Egor
23.08.2016
10:24:43
а если его не передать, то react не сможет подхватить рендеринг

Alex
23.08.2016
10:25:13
воот, значит нужно не делать начальный рендеринг

Egor
23.08.2016
10:25:22
тогда не будет событий

Alex
23.08.2016
10:27:22
точно, может быть попробую патч как-нибудь позднее сделать. Чтобы рендеринг опускался, но события отрабатывали

Lupsick
23.08.2016
10:27:52
какие события?

Google

Egor
23.08.2016
10:28:01
ну там onClick например

Lupsick
23.08.2016
10:28:14
ты в компоненте делаешь онклик при маунте?

Egor
23.08.2016
10:28:22
при рендере

Lupsick
23.08.2016
10:28:34
биндишь онклик или дергаешь онклик?

Egor
23.08.2016
10:30:00
это не важно, мы о другом, что если не вызвать первоначальный рендеринг на клиенте, то события не будут работать, потому что просто ничего не инициализируется, а чтобы вызвать рендеринг и чтобы он соответствовал серверному, то клиент должен получить полный стейт со всеми данными в виде json, и ровно об этом дублировании и идет речь
получается что в html который приходит с сервера содержится отрендеренный html с данными и плюс к этому еще json с теми же данными для первоначального рендеринга на клиенте

Lupsick
23.08.2016
10:34:07
сложна и малопохоже на правду
пусть сережа рассудит
читай проект короче все равно там все это есть

Egor
23.08.2016
10:40:42
В проекте по ссылке ровно такая реализация

Vladimir
23.08.2016
10:57:44
Если не передавать initial state, то реакт перерисует все заново, придется данные перезапрашивать и все такое
На самом деле это дублирование - не такой большой оверхед, особенно если врубить гзип

S
23.08.2016
11:28:24
Вопрос знатокам #Redux, почему если я в connect использую ownProps, то этот компонент всегда будет не pure?
if (pure && !this.doStatePropsDependOnOwnProps) {
var haveStatePropsChanged = tryCatch(this.updateStatePropsIfNeeded, this);
if (!haveStatePropsChanged) {
return;
}
if (haveStatePropsChanged === errorObject) {
this.statePropsPrecalculationError = errorObject.value;
}
this.haveStatePropsBeenPrecalculated = true;
}
кусок кода из react-redux
Вопрос скорее идеологический, т.к. видно что это было сделано специально


Alex
23.08.2016
11:42:28
#
Подумал как можно решить проблему с дублированием: заменять большие объёмы данных на специальную заглушку, которую должен начать понимать реакт, что-то типа new React.KeepContent()
И клиентская перерисовка произойдёт как обычно но представления заглушенных данных не будут перерисованы
Но потребуется учесть в коде что может придти заглушка, если перед отрисовкой в render делается какое-то преобразование,
например если данные это текст, и в него вставляется br-ки как во втором моём кейсе
Gzip не поможет, если в представлении данные очень отличаются от оных в сыром сериализованном виде
А данных очень много, например статьи/тексты/книги как у меня

S
23.08.2016
11:49:16