
andretshurotshka?❄️кде
13.09.2017
17:21:41
?

Artyom
13.09.2017
17:31:41
shallowCompare
Подробнее, пожалуйста?
Я всегда думал что реакт сравнивает новый и старые пропсы, сейчас читанул, он этого не делает. Ок, не прав. Но как написано тут https://habrahabr.ru/post/319536/ "Определение функции по умолчанию возвращает true"
shouldComponentUpdate(nextProps, nextState) {
return true;
}
Почему у меня тогда в обычном реакт компоненте не происходит обновление при приходе новых пропсов большой глубины и происходит, если я руками задаю
shouldComponentUpdate(nextProps, nextState) {
return true;
}

Denis
13.09.2017
17:32:17
Ребята, очень нужны ваши доклады :)

Юра
13.09.2017
17:33:46

Google

Юра
13.09.2017
17:34:01
А то не очень понятно, что это за пропсы большой глубины.

Artyom
13.09.2017
17:34:26
Выше писал
Нет ну это невозможно...
На сколько глубоко реакт пропсы сверяет в обычном компоненте?
У меня обновляются данные в nextProps.app.state.person.avatar: string, а он даже не пытается рендерить

Юра
13.09.2017
17:34:45
Пропсы приходят при рендеринге из родителя.

Kelin
13.09.2017
17:35:28

Stepan
13.09.2017
17:36:21

Юра
13.09.2017
17:36:42
Т.е.
const Children = (props) => {
// Вот здесь вот они приходят.
return (<div />)
}
const Parent = () => {
return <Children />
}

Artyom
13.09.2017
17:37:40

Юра
13.09.2017
17:38:56
Реакт вообще не сравнивает структуру пропсов, а просто перерисовывает компонент каждый раз. Если пропсы поменялись где-то в глубине, то нужно явно вызвать forceUpdate();

Дмитрий
13.09.2017
17:40:02

Юра
13.09.2017
17:40:32

Дмитрий
13.09.2017
17:40:36
Вообще забудь про существование forceUpdate

Google

Artyom
13.09.2017
17:41:00
Я это все понимаю Я не понимаю как может отработать componentWillReceiveProps, но не отработать componentWillUpdate в этой парадигме?

Сергей
13.09.2017
17:41:30

Юра
13.09.2017
17:41:56

philipp
13.09.2017
17:41:57
жёпу себе pinned

Stepan
13.09.2017
17:42:00

Сергей
13.09.2017
17:42:32

Artyom
13.09.2017
17:42:41
Ну тут я с совой согласен. У меня все эти вопросы возникли в легаси проекте. В своих не возникали пока

Mike
13.09.2017
17:42:43
Обоснование будет?
потому что forceUpdate если понадобился, то ты сотворил какую-то дичайшую хуету

Artyom
13.09.2017
17:43:05
Повторюсь. Как может отработать componentWillReceiveProps, но не отработать componentWillUpdate в этой парадигме?

Юра
13.09.2017
17:43:37
componentWillUpdate ЕМНИП, не вызывается при первоначальном рендеринге.
Т.е. только когда замаунтеный компонент перерендеривается.

Andrey
13.09.2017
17:44:07
Ну, логично.

Юра
13.09.2017
17:44:45
Про forceUpdate: оценочные суждения не принимаются, только факты интересуют.

Stepan
13.09.2017
17:45:07

Сергей
13.09.2017
17:45:10

Stepan
13.09.2017
17:45:28
Мало того, здоровый человек на это и расчитывать не будет

Artyom
13.09.2017
17:46:30
?Повторюсь? Как может отработать componentWillReceiveProps, но не отработать componentWillUpdate в этой парадигме?

Stepan
13.09.2017
17:46:33
Аргументы "за"-то будут? "Мне так удобно"?

Дмитрий
13.09.2017
17:47:02
Lifecycle курильщика

Google

Юра
13.09.2017
17:47:07
Т.е. получается, что когда компонент рендерится в первый раз, то во все последующие разы, когда он рендерится в том же месте в доме, ´componentWillUpdate´ вызывается.

Mike
13.09.2017
17:47:20

Юра
13.09.2017
17:47:34

Stepan
13.09.2017
17:47:36

Mike
13.09.2017
17:48:18

Artyom
13.09.2017
17:48:27

Юра
13.09.2017
17:48:55

Mike
13.09.2017
17:49:53

Юра
13.09.2017
17:50:03
´componentWillUpdate() is invoked immediately before rendering when new props or state are being received. Use this as an opportunity to perform preparation before an update occurs. This method is not called for the initial render.´

Mike
13.09.2017
17:50:23

Юра
13.09.2017
17:50:55
И
React doesn't call componentWillReceiveProps with initial props during mounting.

Artyom
13.09.2017
17:51:49

Stepan
13.09.2017
17:52:10

Mike
13.09.2017
17:52:16
>_<
Где?
новые пропсы когда равны старым, ну блин

Сергей
13.09.2017
17:52:30

Mike
13.09.2017
17:53:21

Artyom
13.09.2017
17:53:21
новые пропсы когда равны старым, ну блин
А я тебе говорю, что 1) по дефолту shouldComponentUpdate должен возвращать всегда true, во вторых у меня вложенность в 5 степеней - пропсы меняются, но обновления не происходит. ЧЯДНТ?

Google

Юра
13.09.2017
17:55:48
Какая трогательная забота.

Stepan
13.09.2017
17:56:40
Ты продолжаешь советовать хуйню, игнорируя доку и аргументы?

Сергей
13.09.2017
17:57:13
Он пошел в бан

Stepan
13.09.2017
17:57:25
Спасибо

Artyom
13.09.2017
17:59:46
А вот что за equal я чет не нашел

Mike
13.09.2017
18:03:24

Ilya
13.09.2017
18:04:39

Artyom
13.09.2017
18:06:09

Mike
13.09.2017
18:06:41
tl;dr когда сравнивается объект, он сравнивается по ссылке, а тебе нужно не по ссылке а по наполнению

Artyom
13.09.2017
18:07:02

Mike
13.09.2017
18:07:07
поэтому тебе или свою надо функцию написать, которая рекурентно пробежится по полям и сравнит, или стоковую заюзать
от кого угодно

Artyom
13.09.2017
18:07:25
В лодаше есть...
Понятно. Ответ на мой вопрос - реакт сравнивает только ссылки на this.props и nextProps.
Ну и стейт с контекстом...

Mike
13.09.2017
18:08:48
так это вроде написали сразу
просто это частый вопрос здесь

Google

Ilya
13.09.2017
18:09:00
нет
если хоть одна ссылка поменялось, то происходит рендер

Mike
13.09.2017
18:09:03
и ответ со словом shallow сразу намекает

Ilya
13.09.2017
18:09:16
он сравнивает первый уровень этих объектов

Artyom
13.09.2017
18:09:55
Ясно...

Mike
13.09.2017
18:10:33
да нет же
ты просто почему-то shallowCompare сразу туда записал
хотя это термин из простого js

Artyom
13.09.2017
18:11:03