
Tim
27.04.2016
11:01:51
Вроде бы волна флуда и негодования от флуда закончилась, можно спросить про Rdux? Собрался я изучить Redux но посмотрел вот это видео: https://youtu.be/a4OhLoH0nrs и подумал что Redux не так прекрасен, стал судорожно выпилисать все байнды из react компонентов, но сильно мне это не помогло, действительно ли Redux делает приложение медленнее или наоборот? Если я тоже храню все состояние приложения в одном верхнем state и раздаю дочерним через props, нужен ли мне Redux? У меня загвоздка в том что изменив state у меня перерендериваются все компоненты, поможет ли Redux сделать так чтобы перерендеривалось только то что действительно поменялось в приложении?

Алексей
27.04.2016
11:04:24
тож видел это видео
ну если не использовать конструкцию ::handler
а биндить в конструкторе, то все не так уж и плохо будет

Google

Алексей
27.04.2016
11:05:12
а на счет приходящих props, да, каждый компонент будет перерисовываться, если подключен к redux
и это плохо, если у вас таблица на сто строк, с 20 ячейками в строке
спасает shouldComponentUpdate и какая-нить ф-ция ала _.isEqual()
аля*

Vladimir
27.04.2016
11:06:01
вообще как минимум shouldComponentUpdate должен помочь, неважно, редукс у вас наверху или просто стейт верхнего компонента

Максим
27.04.2016
11:06:35
/angular_light

Vladimir
27.04.2016
11:06:58
удалите эти сообщения плиз!

Алексей
27.04.2016
11:07:21
а в чем их прикол?

Максим
27.04.2016
11:07:23
Каждый должен тыкнуть, что бы понять чем грозит клие.
Клик

from
27.04.2016
11:07:54

Алексей
27.04.2016
11:08:50
Так, у вас в любом случае state меняется, раз меняется state, пойдет цепочка обновлений всех компонентов
и обычная проверка

Google

from
27.04.2016
11:09:00
в каком "любом" случае?

Алексей
27.04.2016
11:09:16
а как тут форматировать код?

from
27.04.2016
11:09:18
если стейт изменился, то разумеется надо перерендеривать :)

Алексей
27.04.2016
11:09:54
work!
о, отлично
так вот
допустим у меня такой стейт {co1: 1, co2: 2}
и к нему подключаются два разных компонента, один берет св-во co1, другой co2

Andrey
27.04.2016
11:11:05

from
27.04.2016
11:11:20

Алексей
27.04.2016
11:11:56
и мы меняем свойство co1 = 3, вопрос: нам нужно перерисовать второй компонент, который берет только свойство co2?

from
27.04.2016
11:12:00

Алексей
27.04.2016
11:12:38
так суть в том, что стейт всегда один, и редьюсер возвращает новый объект, с новой ссылкой

from
27.04.2016
11:12:43

Алексей
27.04.2016
11:12:50
будет
потому что ссылки изменились
редьюсер возвращает новый объект, с новой ссылкой

from
27.04.2016
11:13:06
он сравнивает

Алексей
27.04.2016
11:13:27
если co - примитив, то сравнение пройдет

Google

Алексей
27.04.2016
11:13:37
а если co2 объект?

from
27.04.2016
11:14:04
на то immutable стейт

Алексей
27.04.2016
11:15:07
так immutable подразумевает ,что мы не можем менять сущность, значит мы просто создаем новую копию с измененными свойствами, и ссылки уже разные
посмотрите видео, там об это говорится как раз

Andrey
27.04.2016
11:15:18
там используется shallowEqual для проверки, по этому должно корректно сравнивать не только приметивы

from
27.04.2016
11:15:33
https://github.com/reactjs/react-redux/blob/master/src%2Fcomponents%2Fconnect.js#L76-L78

Ҫѐҏӗѫӑ
27.04.2016
11:18:34
с объектами все ок будет, проверка быстрая, но выполнится много лишней фигни
другое дело — массив. вот там беда
mapStateToProps тот же — быстрый, но выполнится
два одинаковых коннекта обычно - это два разных на самом деле
и тд

Andrey
27.04.2016
11:20:21
да, проверки выпонятся, но не должен произойти перерендер

Ҫѐҏӗѫӑ
27.04.2016
11:20:58
боттлнеки могут быть и в этих проверках в аппах с упором на сильный риалтайм
тем более с массивами
но скоро везде будут Map и Set, будет более менее норм

from
27.04.2016
11:22:45

Ҫѐҏӗѫӑ
27.04.2016
11:23:13
вроде там была речь о том, что их будут дергать со стороны
а так, если не мутировать, то все хорошо в большинствей кейсов, да

Алексей
27.04.2016
11:24:46
так будет и в том случае, если два компонентам используют разные части одного редьюсера? При этом одна из этих частей поменялась
оба компонента перерендерятся? или только тот, который подключен к изменившейся части редьюсера?

Google

Ҫѐҏӗѫӑ
27.04.2016
11:25:36
компоненты не используют редьюсеры

Алексей
27.04.2016
11:25:46
контейнеры*

Admin
ERROR: S client not available

Ҫѐҏӗѫӑ
27.04.2016
11:26:12
это не связано напрямую никак

Andrey
27.04.2016
11:26:15
перерендерится только тот, где фактически изменились данные

Ҫѐҏӗѫӑ
27.04.2016
11:26:26
на что подписаны, от того и изменятся

Denis
27.04.2016
11:26:37
@chicoxyzzy @iamstarkov @anorudes @maullerz, готовы? и в горе, и в радости, пресекать вспышки флуда и разгонять школоту на пользу общую и благо для?
+ @hitmaker готов помочь

Ҫѐҏӗѫӑ
27.04.2016
11:28:12
мне пофиг. могу разгонять, могу не разгонять

Tim
27.04.2016
11:29:54
http://jsraccoon.ru/react-sort-and-search
Конкретный пример если позволите, выполнял этот урок, вот мое решение, и здесь при нажатии на кнопку сортировки перерендеривается все?
http://kortv.github.io/react-sort/
https://github.com/kortv/react-sort-and-search
Это пример одного из участников на Redux, и у него перерендеривается только то что изменилось
online
http://artanik.github.io/react-challenge-sort-and-search/
git
https://github.com/artanik/react-challenge-sort-and-search
Проверял в chrome Enable paint flashing
Если не сложно, можете научить, почему c Redux перерендеривается только то что нужно, а у меня все?

Andrey
27.04.2016
11:31:27
сравни структуры сторов и connect , может ты прокидываешь весь стор, а другой только нужную часть )

Ҫѐҏӗѫӑ
27.04.2016
11:32:55
или в стейте радаксовом нужная часть всегда подменяется по какой-то причине
btw не увидел тут редакса вообще
https://github.com/kortv/react-sort-and-search/blob/master/package.json

Vladimir
27.04.2016
11:38:11
у него и нет редакса, он же написал это.
Перерендеривается все, потому что не прописаны shouldcomponentUpdate у компонентов

Tim
27.04.2016
11:38:34
Не не не я редакс только учу, я его не понимаю и сравниваю свой чистый реакт с редаксом
Vladimir т.е мне нужно в каждом компоненте прописать shouldcomponentUpdate?

Ҫѐҏӗѫӑ
27.04.2016
11:39:44
компоненты всегда ререндерятся при получении новых пропсов или изменении стейта
предотвратить это силами реакта можно с помощью shouldComponentUpdate

Tim
27.04.2016
11:40:39
Сережа, но в версии с редаксом такого нет, или я чего-то не понимаю?
там у него вроде нигде shouldComponentUpdate не используеться

Google

Denis
27.04.2016
11:41:03
https://medium.com/@alexandereardon/performance-optimisations-for-react-applications-b453c597b191#.pc1m50g8w
Вот хорошая свежая/ статья про shouldcomponentUpdate

Ҫѐҏӗѫӑ
27.04.2016
11:41:09
там не приходят новые пропсы из-за connect (который в react-redux)
точнее даже не из-за него, а из-за самого редакса

Tim
27.04.2016
11:42:42
вот именно в этом и вопрос, т.е если я буду использовать Redux, он сам за меня будет выяснять что мутировало а что нет, и перерисует только нужное?
просто в видео с которого я начал, мне показалось что говориться обратное, т.к Redux всегда возвращает новый стор соответственно и новый стэйт и из за этого все перерисовывается и надо исолькзовать некие магические Реселекты, чтобы такого небыло

Ҫѐҏӗѫӑ
27.04.2016
11:44:23
не то чтобы сам, но если придерживаться иммутабельности, то он в большинстве случаев поможет
реселект для другого
он мемоайз делает в коннектах, когда пропсы надо вычислить перед тем, как пробросить

Tim
27.04.2016
11:45:41
Т.е если подключать Immutable то все будет хорошо? Redux проверит что изменилось и реакт отрендерит только нужное?

Ҫѐҏӗѫӑ
27.04.2016
11:46:16
с Immutable не всегда хорошо, потому что у него есть своя цена. он не дает иммутабельность бесплатно