169 похожих чатов

Https://Codesandbox.Io/S/Ecstatic-Fire-1zbhz?File=/Src/App.Js Почему при первом клике происходит перерендер - понятно (меняется значение

стейта)
Почему при втором клике - не понятно (ведь я делаю сетСтейт того же значения)
Последующие обновления стейта тем же значением не триггерят обновление

Из-за чего происходит п2?

24 ответов

22 просмотра

реакт проверяет на === прев стейт и то что ты пытаешся засетить и игнорит если оно равно

Danila- Автор вопроса
Dmitriy Shuleshov
реакт проверяет на === прев стейт и то что ты пыта...

Понимаю, но в пункте 2 я сечу то же, что и в п3

с useEffect всего два рендера, один при рендере, один при клике, без него три

Danila- Автор вопроса
Danila
Понятнее не становится :D

как по мне это означает что ререндера не происходит, но почему вызывается console.log лишний раз...

Danila- Автор вопроса
Stanislav
как по мне это означает что ререндера не происходи...

Вызов консоль лога и означает вызов перерендера. Под перерендером я понимаю "выполнение компонента"

Danila
Вызов консоль лога и означает вызов перерендера. П...

Я предположу почему так происходит 1 вызов - инит рендер 2 вызов - сравниваем 0 с 12 - обновляем 3 вызов - сравниваем 0 с 12 - так как в обновление стейта ассинхронно 4 вызов - сравниваем 12 с 12 - который попал после 2 вызова

Danila- Автор вопроса
Dmitriy Shuleshov
Я предположу почему так происходит 1 вызов - инит ...

Ничего не понял. В моём понимании, когда я делаю setState - система хуков 1) Знает, какой компонент зацеплен за этот стейт 2) Знает предыдущее значение 3) Если старое не равно новому - делает рендер компонента (синхронно или нет не так уже важно)

Danila
Ничего не понял. В моём понимании, когда я делаю s...

3) Оно не делает ререндер компонента, а отмечает его как dirty, и говорит движку, что надо его перерендерить, что и вызывает подобной прикол, наверное. Поэтому, синхронно или нет-важно

Danila
Ничего не понял. В моём понимании, когда я делаю s...

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

Danila- Автор вопроса
Daniel Mednikov
3) Оно не делает ререндер компонента, а отмечает е...

Ну хорошо, помечен как дёрти. Но если он уже перерендерился, почему в этот момент стейт не знает своего значения и при очередном setState не может их сравнить?

Danila- Автор вопроса
Daniel Mednikov
Не знаю 🤷‍♀

Вот и я не понял. У нас Абрамова нет в чате? )

Danila
Вот и я не понял. У нас Абрамова нет в чате? )

Console.log быстрее вызовется асинхронного изменения стейта, компонент не рендерился, чекай в useEffect

Danila- Автор вопроса
Konstantin Fateev
Console.log быстрее вызовется асинхронного изменен...

Как он может вызваться быстрее асинхроннного изменения стейта, если компонент рендерит верное значение уже новое?

Danila
Как он может вызваться быстрее асинхроннного измен...

асинхронность внутри реакта != в жс, в этом кроется ответ.

Danila- Автор вопроса
Stanislav
асинхронность внутри реакта != в жс, в этом кроетс...

1) Смелое заявление, учитывая, что реакт написан на жс и не имеет никаких других механизмов асинхронности, которых не было бы в жс. 2) Не понимаю, как это меняет суть const Component = () => { const someValue = getSomeValue() ^ console.log(someValue) ^ return <div>{someValue}</div> ^ } Оба someValue, и в консоли и в jsx имеют одинаковое начение и иного быть не может

Danila
1) Смелое заявление, учитывая, что реакт написан н...

смелое заявление которое ссылается на Дэна Абрамова, у него спросите)

Danila
Можно ссылку?

https://t.me/react_js/1062762 тайминг я вам не назову.

Danila
1) Смелое заявление, учитывая, что реакт написан н...

Как по твоему реак узнает изменилось ли значение не вызвав компонент?

Danila- Автор вопроса
Danila
Вот и я не понял. У нас Абрамова нет в чате? )

Я добавлял Даню лет 5 назад, но тут слишком большой поток сообщений 🙂

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта