
Alexander
10.01.2017
07:10:49
Придет лид и скажет обновлять (если яйца за такой код еще не оторвал)

Regina
10.01.2017
07:11:01

Sergey
10.01.2017
07:11:25
та пофиг, у нас нет команды js, я один разраб js, и приложения на реакте все одностраничные, так что могу позволить себе немного своего стиля кода)

Alexander
10.01.2017
07:11:42

Google

Дмитрий
10.01.2017
07:13:17

Andrey
10.01.2017
07:14:46
По ссылке там есть чё?

Sergey
10.01.2017
07:16:03
я кажеться догадываюсь почему предупреждение)
это насчет мутирования)
ща проверю

Dmitrii
10.01.2017
07:17:33

Regina
10.01.2017
07:18:49
@dimonnwc3 спасибо) А проблем с другими библиотеками не возникло?
какие подводные камни у перехода? К чему готовиться?)

Andrey
10.01.2017
07:20:13

Dmitrii
10.01.2017
07:20:14
Апи поменяли, много кода переписать прийдется, ну и мозг немного перестроить, если он ещё в react way не научился.

Regina
10.01.2017
07:21:48
ок, спасиб) Пойду внимательно смотреть доки и готовиться к лучшему)))

Sergey
10.01.2017
07:27:53
это насчет мутирования)
не, дело было не в мутировании, все равно предупреждение, но я написал все в setState и получилось с виду оч ужасно и не читабельно

Google

Sergey
10.01.2017
07:28:29
за такое точно можно пальци сломать)

Timur
10.01.2017
07:29:01
ППЦ.
Об этом в доке написано.
Люди тут документацию Реакта не читают?

Sergey
10.01.2017
07:29:32
что написанно? ты о чем
на примерах кода в основном учюсь

Maxim robox
10.01.2017
07:30:18
На хабре есть перевод доки.

Sergey
10.01.2017
07:30:30

Timur
10.01.2017
07:31:09
что написанно? ты о чем
https://facebook.github.io/react/docs/state-and-lifecycle.html#state-updates-may-be-asynchronous
React may batch multiple setState() calls into a single update for performance.
Because this.props and this.state may be updated asynchronously, you should not rely on their values for calculating the next state.
Про данный скрин.

Nikita
10.01.2017
07:47:26
Ага. Популярная ошибка. Кажется ее здесь через день обсуждают

Aleksey
10.01.2017
07:50:30
на такие случаи есть this.setState((state, props) => ...) вариант

Sergey
10.01.2017
07:53:42
как

Timur
10.01.2017
07:54:03
Оберни в fat arrow function.
Которая получает prevState.
Его и юзай, вместо this.state.
Это не то чтобы некрасивый вариант, он неправильный. И потенциально бажный.

Sergey
10.01.2017
07:55:11
а, какая разница? все равно ф-ция будет возращать тот же объект

Google

Timur
10.01.2017
07:55:20
React may batch multiple setState() calls into a single update for performance.
Because this.props and this.state may be updated asynchronously, you should not rely on their values for calculating the next state.
Dan Abramov чёрным по белому написал в доке, почему это бажный вариант.

Sergey
10.01.2017
07:56:15
я вообще пропсы не трогаю в данном случае

Timur
10.01.2017
07:56:26
this.state трогаешь.

Aleksey
10.01.2017
07:56:33
не знаю как относишься к redux-form и редаксу, в целом, но вот такой страшненький код оно решает на раз

Sergey
10.01.2017
07:56:35
и?

Timur
10.01.2017
07:56:45
и?
В документации написано нельзя так трогать.
Потом не удивляйся undefined behavior в проекте.
Через полгода.

Sergey
10.01.2017
07:57:30
стоп, я просто обновил состояние, что в этом такого
я чет не догоняю

Aleksey
10.01.2017
08:00:36
если у тебя этот setState ровно в одном месте, то сильно страшного ничего произойти не должно. проблемы начинаются когда есть несколько setState и ты думаешь что они отработают в определенном порядке

Aleksey
10.01.2017
08:03:12
а на самом деле реакт батчит обновления стейта и в зависимости от условий ты можешь получить как уже новый стейт в следующем setState так и еще старый. особенно если у тебя эти setState раскиданы по lifecycle методам

Sergey
10.01.2017
08:08:07
ммм, понял, типо нужно старое состояние в новое записывать
развели тут диалог на 20 сообщений)

Alexander
10.01.2017
08:11:20
this.setState(state => ({
checked: !state.checked,
}))
Тебе про это говорят, а не про то, что старое состояние надо записывать

Sergey
10.01.2017
08:11:36
понял! спасибо! не знал
типо prevState

Google

Alexander
10.01.2017
08:12:19
И оно никуда не записывается

Timur
10.01.2017
08:12:40

Andrew
10.01.2017
08:15:25

Admin
ERROR: S client not available

Andrew
10.01.2017
08:18:04

Aleksey
10.01.2017
08:18:34
это просто означает что стейт где-то в самом верху )
в целом, я фанат редакса. стейт возможен но только там где оно уместно

Sergey
10.01.2017
08:19:25
у меня есть чекбоксы, когда я их чекаю, в состояние записываеться что они чекнуты или нет, и тут же в них я прописываю
checked={this.state.checked[name]}
предпологаю что из за этого

Andrew
10.01.2017
08:20:02

Aleksey
10.01.2017
08:20:50

Sergey
10.01.2017
08:21:17
прод

Aleksey
10.01.2017
08:21:31
тогда рекомендую инвестировать время в redux и до кучи в redux-form. окупится

Andrew
10.01.2017
08:22:49
redux-form мне не зашел.

Sergey
10.01.2017
08:22:55
редукс умею, но дело не в нем

Aleksey
10.01.2017
08:24:06
дело, безусловно не в нем а в архитектуре. если приходится городить такие костыли с setState и ref - это точно кривая архитектура компонента. а редакс просто один из способов ее поправить

Sergey
10.01.2017
08:24:35
как же без refs

Aleksey
10.01.2017
08:25:02
если ты не работаешь напрямую с элементом DOM'a то запросто

Sergey
10.01.2017
08:25:17
работаю
кароче я пилю веб аналитику как в яндекс метрики, там куча фильтров

Aleksey
10.01.2017
08:26:32
this.refs.searchFilter.value - это кривоватый способ получения значения вместо onChange/onSelect или что там за контрол

Google

Sergey
10.01.2017
08:27:06
ты имеешь ввиду через евент нужно получать) но здесь не так)
<input value/>
<button onClick>
вот так
поэтому

Brs
10.01.2017
08:28:18
это не ошибка а ворнинг

Alexander
10.01.2017
08:28:27
Сделай фидл уже, там тебе на нем сразу и покажу как делать

Sergey
10.01.2017
08:28:35
да, все работает
но предупреждение
это

Brs
10.01.2017
08:29:01
https://facebook.github.io/react/docs/uncontrolled-components.html

Aleksey
10.01.2017
08:29:06

Sergey
10.01.2017
08:29:38
onChange вызываеться каждый раз при изменении инпута, а мне нужно по клику на кнопку
поэтому использую refs.input.value

Alexander
10.01.2017
08:30:15
Ну записывай в промежуточное состояние, потом в основное сливай

Aleksey
10.01.2017
08:30:22
onChange будет просто сохранять состояние инпута. что тебе надо сделать при нажатии на кнопку - делай

Brs
10.01.2017
08:30:29
вкратце, если нужно только значение по умолчанию брать из стейта