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

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

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

45 ответов

22 просмотра

лучше так: 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, и меняем ее значение )

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

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

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
Кибер Бомж
8
Карта сайта