Fork me on GitHub
#clojure-russia
<
2017-03-03
>
andfadeev10:03:17

а может ктонить пояснить базовую вещь, вот в реакте есть shouldComponentUpdate и два типа компонентов Component и PureComponent, второго в shouldComponentUpdate используется shallow сравнение statе и props, для первого всегда возвращается true по дефалту, а как вообще определятся поменялся ли стейт? тоесть как сравнивается стейт до вызова shouldComponentUpdate

andfadeev10:03:36

чет в доке не смог найти быстро

artemyarulin10:03:36

дак ты же сам вызываешь setState setProps, поэтому первый раз реакт и понимает когда чо произошло. Или я не понял вопроса

andfadeev10:03:23

погоди, тоесть каждый раз когда setState происходит ререндер?

andfadeev10:03:44

он не сравнивает стате на equals?

artemyarulin10:03:54

ну вот будет ли рендер как раз определяет реализация shoudComponentUpdate

andfadeev10:03:54

тоесть подефолу если я вызову setState и передам идентичный стейт то все равно будет ререндер?

artemyarulin10:03:45

дак ты попробуй - репл сила 🙂

misha10:03:42

shouldComponentUpdate - метод, в котором ты сам наваливаешь логику, чтобы оптимально ре-рендерилось, если тебя не устраивает дефолтное принятие решения

andfadeev11:03:06

это я уже понял

olegakbarov11:03:14

чуваки, а как вы хэндлите случай когда надо много последовательных http-запросов сделать? типо 6 штук, каждый на основе результата предыдущего? ну и с ретраями и эррор хэндлингом?

misha11:03:49

колбэки или корасинк

andfadeev11:03:16

@misha дефалтное решение для component это всегда true, даже если стейт по сути не изменился, так?

andfadeev11:03:21

просто уточняю)

misha11:03:55

у тебя весь аппликейшн в общем случае - последовательные запросы, зависящие от результата предыдущих kappa

misha11:03:28

@andfadeev не знаю, за меня @tonsky в роме порешал всё opieop иногда только специально дописываю rum/static, где точно знаю, что выхлоп зависит только от аргументов (и то это теперь якобы по-дефолту так)

andfadeev11:03:07

да за меня тоже порешал, но вот начал спорить с чуваком из просто js мира

andfadeev11:03:17

и понял что не совсем понимаю как оно там работает

misha11:03:34

а в доках реакта чо пишут?

andfadeev11:03:20

shouldComponentUpdate(nextProps, nextState) Use shouldComponentUpdate() to let React know if a component's output is not affected by the current change in state or props. The default behavior is to re-render on every state change, and in the vast majority of cases you should rely on the default behavior.

andfadeev11:03:47

но я не понимаю как определяется every state change

andfadeev11:03:59

по вызову setState?

glebkaf11:03:39

Когда меняются пропсы еще компонент рендерится

artemyarulin11:03:26

>state change поменять стейт можно только через вызов setState

glebkaf11:03:15

https://facebook.github.io/react/docs/react-component.html#shouldcomponentupdate >shouldComponentUpdate() is invoked before rendering when new props or state are being received.

artemyarulin11:03:00

@olegakbarov еще можно промисы, всякие future ну и вообще руками написать асинхронный фор/loop не очень сложно. кор.асинк ради одного раза тащить не надо, он сложный по началу и не имеет встроенной поддержки ошибок. https://github.com/funcool/promesa очень хороша

misha11:03:33

НАШЕЛ

misha11:03:40

но это файбер

misha11:03:28

- если метод заоверайдили - его вызвать - если пур компонент (пур=тру) - поверхностно сравнить - по-умолчанию вернуть тру.

misha11:03:12

не могу найти, где и кто именно вызывает shouldComponentUpdate

olegakbarov12:03:33

спс, сейчас гляну

savelichalex13:03:57

а я вообще нативные промисы юзаю, без promesa)

olegakbarov13:03:59

а где посмотреть какие-то референсы?

olegakbarov13:03:15

просто лесенка из 6 колбэков это такое

savelichalex13:03:32

(-> (fetch 'some/api')
      (.then #(fetch 'another/api'))
      (.then #(fetch 'another/one/api')))
вот и все))

olegakbarov13:03:47

я в контексте jvm сейчас интересовался

olegakbarov13:03:11

надо было пояснить 😅

artemyarulin13:03:02

Thread.new 😄

savelichalex13:03:22

мож future которое создает 6 других feature и ждет их последовательно)

olegakbarov13:03:58

not sounds like a plan)

kronos_vano13:03:28

not sounds? 😕

olegakbarov14:03:01

ну я рассчитывал, что есть более элегантные решения

larhat14:03:47

@olegakbarov ну можно сделать функу, которая будет результат хттп запроса в канал и тогда будет

(-> data1
      (mk-req url1)
      (async/<!)
      transform-results1
      (mk-req url2)
       ...
)

olegakbarov14:03:47

о, да я вот что-то в таком жанре ожидал