Почему не работает count++? Только count + 1 срабатывает
лучше так: setCount((oldCount) => oldCount + 1)
Потому что ++ равен записи count = count+1 А Стейт надо обновлять через set
да, через count++ мутируется, по сути, мимо сеттера.
На вью писал, что ли....
эм, ну по логике же я беру прошлый count, и count++ должен прибать 1 к прошлому состоянию
Такая записать не гарантирует что ты возьмешь именно прошлый стейт, Владимир по адресу направил, в доке очень понятно написано про это
Мда, думал я setState со всех сторон изучил, видимо дыра осталась, пойду читать
потому что сначала возвращается результат count а потом только в эту переменную происходит прибавление. вот если писать ++count то будет сначала прибавление, а потом возврат значения выражения
Тут не в прошлой записи дело
Чем отличаются х++ и ++х ?
Дело не в ней, но это я так, к делу накинул
потому что оператор постинкремента (++) возвращает значение до инкремента. пиши префиксный инкремент: ++count
Угу, только это мутирует каунт
мутирует да мутирует, это перпендикулярно вопросу кмк
Примитив можно мутировать?🤔
Только это константа
Попробуй написать ++count 😏
Как константа с этим связана? И это не константа кстати, раз он ошибку не ловит
Стейт = константа, ++ оператор переопределяет стейт
Что значит стейт константа?) Каким образом ++ переопределяет стейт? Здесь всё неверно)
И здесь даже противоречия, константы невозможно переопределить
let state = { count: 1} const useState = () => state.count const count = useState() count++ Этот код мутирует объект state?
так он и не запустится, он тебе скажет, что нельзя присваивать в констант
Каким образом я должен изменить константу? И с каких пор стейт не константа?
1. Исправил 2. Как ты вообще эти два слова вместе ставишь? Объясни
Это опечатка на автомате, исправил, у него как раз было let
ну, в таком случае не будет изменяться, естесна. мы же просто в идентификатор записали примитивное значение. теперь это самостоятельный идентификатор с рефом на 1
Бле, ты стейт определяешь let [state, setState]?
При чём тут это?) Очевидно же что и у него было так же, раз у него ошибка не упала🤷
Тогда этот спор ни о чем
Да в смысле ни о чём)) ты напридумывал какой-то фигни, а на прямой вопрос теперь не отвечаешь)
Ну ты не можешь переопределить константу с помощью инкремент оператора, что не так? Ибо он берёт ее и перезаписывает, хоть в этом примере и не роляет
Тогда при чём тут константы, если они ни с примером выше, ни с самим изначальным вопросом не связаны?
Я тебе о примитивах и мутациях писал, а ты почему то начал о константах
let и const самого стейта никак не касаются, это защита от дурака
так при деструктуризации ты получаешь идентификаторы на примитивное значение и функцию, правильно? и каждый из них const, я думаю, что он про это имеет ввиду
Почему они обязательно const? Там был код где у человека count++ не вызывал ошибку, то очевидно там let, а вот комментарий что эта операция мутирует стейт, явная ошибка
а, ну - це да, естественно. сам стейт отдельно лежит в жопе мира, а в каунт мы получаем просто то же значение, что и в стейте под капотом. поэтому они не связаны и естественно для изменения стейта мы должны сеттер юзать
Он все правильно говорит, не меняется, потому что const, если бы было let, то тогда менялся бы
Где там const? И при чём тут это вообще?
Кстати У меня выше упрощённый пример с let, хочешь сказать там стейт меняется?
да нет, просто они глупят немного) мне с телефона впадду скринить, но даже просто эмпирически playcode.io реакт проект, создаешь стейт с инишиалом 0, при онклик={сетА(а++)} он тебе будет ругаться на ассайдж в конст идентификатор. что лишний раз доказывает, что а - это просто идентификатор с примитивным значением и его невозможно переопределить, с стейтом он связан только тем, что он линкуется на значения из стейта, а после самостоятелен до нового сета стейта
Тогда и изначальный код не мутирует
Да, я совсем перепутал с другим примером, когда вне компонента определяем переменную с let, и меняем ее значение )
Обсуждают сегодня