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

Товарищи, давно на реакте не писал, а что за прикол?

Почему не работает count++? Только count + 1 срабатывает

45 ответов

27 просмотров

лучше так: setCount((oldCount) => oldCount + 1)

Потому что ++ равен записи count = count+1 А Стейт надо обновлять через set

да, через count++ мутируется, по сути, мимо сеттера.

На вью писал, что ли....

Kirill- Автор вопроса
Vladimir Voronov
Потому что ++ равен записи count = count+1 А Стейт...

эм, ну по логике же я беру прошлый count, и count++ должен прибать 1 к прошлому состоянию

Kirill
эм, ну по логике же я беру прошлый count, и count+...

Такая записать не гарантирует что ты возьмешь именно прошлый стейт, Владимир по адресу направил, в доке очень понятно написано про это

Kirill- Автор вопроса
Arseny Filatov
Такая записать не гарантирует что ты возьмешь имен...

Мда, думал я setState со всех сторон изучил, видимо дыра осталась, пойду читать

потому что сначала возвращается результат count а потом только в эту переменную происходит прибавление. вот если писать ++count то будет сначала прибавление, а потом возврат значения выражения

IceBerg
Тут не в прошлой записи дело

Дело не в ней, но это я так, к делу накинул

потому что оператор постинкремента (++) возвращает значение до инкремента. пиши префиксный инкремент: ++count

Угу, только это мутирует каунт

Qnemes Qnemes
Угу, только это мутирует каунт

мутирует да мутирует, это перпендикулярно вопросу кмк

Qnemes Qnemes
Угу, только это мутирует каунт

Примитив можно мутировать?🤔

Только это константа

Попробуй написать ++count 😏

Qnemes Qnemes
Только это константа

Как константа с этим связана? И это не константа кстати, раз он ошибку не ловит

IceBerg
Как константа с этим связана? И это не константа к...

Стейт = константа, ++ оператор переопределяет стейт

Qnemes Qnemes
Стейт = константа, ++ оператор переопределяет стей...

Что значит стейт константа?) Каким образом ++ переопределяет стейт? Здесь всё неверно)

Qnemes Qnemes
Стейт = константа, ++ оператор переопределяет стей...

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

Qnemes Qnemes
Стейт = константа, ++ оператор переопределяет стей...

let state = { count: 1} const useState = () => state.count const count = useState() count++ Этот код мутирует объект state?

IceBerg
let state = { count: 1} const useState = () => st...

так он и не запустится, он тебе скажет, что нельзя присваивать в констант

IceBerg
let state = { count: 1} const useState = () => st...

Каким образом я должен изменить константу? И с каких пор стейт не константа?

Qnemes Qnemes
Каким образом я должен изменить константу? И с как...

1. Исправил 2. Как ты вообще эти два слова вместе ставишь? Объясни

koichi
так он и не запустится, он тебе скажет, что нельзя...

Это опечатка на автомате, исправил, у него как раз было let

IceBerg
Это опечатка на автомате, исправил, у него как раз...

ну, в таком случае не будет изменяться, естесна. мы же просто в идентификатор записали примитивное значение. теперь это самостоятельный идентификатор с рефом на 1

IceBerg
1. Исправил 2. Как ты вообще эти два слова вместе ...

Бле, ты стейт определяешь let [state, setState]?

Qnemes Qnemes
Бле, ты стейт определяешь let [state, setState]?

При чём тут это?) Очевидно же что и у него было так же, раз у него ошибка не упала🤷

Qnemes Qnemes
Тогда этот спор ни о чем

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

Ну ты не можешь переопределить константу с помощью инкремент оператора, что не так? Ибо он берёт ее и перезаписывает, хоть в этом примере и не роляет

Qnemes Qnemes
Ну ты не можешь переопределить константу с помощью...

Тогда при чём тут константы, если они ни с примером выше, ни с самим изначальным вопросом не связаны?

Qnemes Qnemes
Ну ты не можешь переопределить константу с помощью...

Я тебе о примитивах и мутациях писал, а ты почему то начал о константах

Qnemes Qnemes
Бле, ты стейт определяешь let [state, setState]?

let и const самого стейта никак не касаются, это защита от дурака

IceBerg
let и const самого стейта никак не касаются, это з...

так при деструктуризации ты получаешь идентификаторы на примитивное значение и функцию, правильно? и каждый из них const, я думаю, что он про это имеет ввиду

koichi
так при деструктуризации ты получаешь идентификато...

Почему они обязательно const? Там был код где у человека count++ не вызывал ошибку, то очевидно там let, а вот комментарий что эта операция мутирует стейт, явная ошибка

IceBerg
Почему они обязательно const? Там был код где у че...

а, ну - це да, естественно. сам стейт отдельно лежит в жопе мира, а в каунт мы получаем просто то же значение, что и в стейте под капотом. поэтому они не связаны и естественно для изменения стейта мы должны сеттер юзать

Он все правильно говорит, не меняется, потому что const, если бы было let, то тогда менялся бы

Edgar Asatryan
Он все правильно говорит, не меняется, потому что ...

Кстати У меня выше упрощённый пример с let, хочешь сказать там стейт меняется?

IceBerg
Кстати У меня выше упрощённый пример с let, хочешь...

да нет, просто они глупят немного) мне с телефона впадду скринить, но даже просто эмпирически playcode.io реакт проект, создаешь стейт с инишиалом 0, при онклик={сетА(а++)} он тебе будет ругаться на ассайдж в конст идентификатор. что лишний раз доказывает, что а - это просто идентификатор с примитивным значением и его невозможно переопределить, с стейтом он связан только тем, что он линкуется на значения из стейта, а после самостоятелен до нового сета стейта

Edgar Asatryan
Нет

Тогда и изначальный код не мутирует

IceBerg
Тогда и изначальный код не мутирует

Да, я совсем перепутал с другим примером, когда вне компонента определяем переменную с let, и меняем ее значение )

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

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

30500 за редактор? )
Владимир
47
Недавно 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
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Oh sorry did you want it in Gunter's chains?
Martin Rys
15
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта