Получается что без useEffect нельзя использовать измененный state?
Всё верно. Потому что setState асинхронный, да и язык так работает, что нельзя изменить константу
const [state, setState] = useState(0);
//^^^^^ – константа, её значение – 0
const onClick = () => {
console.log(state)
// ^^^^^ – константа её значение – 0
setState(1) // при следующем рендере компонента (и при следующем объявлении константы) значение константы будет равно единице
console.log(state)
// ^^^^^ – константа, её значение – всё ещё 0
setTimeout(() => {
console.log(state)
// ^^^^^ – константа, полученная через замыкание, созданное лексическим контекстом функции onClick, её значение всегда будет 0
}, 10 * 1000 * 1000)
}
useEffect(() => { // функция будет вызвана при каждом рендере, при условии, что на прошлом рендере значение state отличалось от текущего
console.log(state)
// ^^^^^ – на первом рендере (до клика) – 0
// на втором рендере (из-за клика изменился стейт, происходит ререндер) – 1
}, [state])
Ростислав, я спросил «зачем скачивать с торрента, если у джетбрейнс на сайте всегда лежит свежий инсталлятор?». Крякать установленное или нет — на вашей совести, но торрент зачем? Оно в открытом доступе на сайте производителя лежит.
Дмитрий Максимюк, нет, тебе вообще не это нужно делать. Это приведёт к другой ошибке — неконсистентный вызов хуков. Тебе нужно либо хорошенько вчитаться в документацию этой экспериментальной библиотеки, либо забить на утечку, либо не пользоваться экспериментальной библиотекой.
Дмитрий Максимюк, лаконичность кода является преимуществом, если добавляет выразительность. Как использование .map вместо for. Если лаконичность не добавляет выразительности или ослабляет её (как в твоём случае), то это не преимущество, а недостаток.
Но это твоя жизнь, твои правила, тут ты полностью прав
Дмитрий Максимюк, между свичом и множественным if нет никакой разницы, кроме читабельности и семантики. Хз, что значит «это индивидуально», но факт достаточно очевидный — свич читабельнее и понятнее
Всё верно. Потому что setState асинхронный, да и язык так работает, что нельзя изменить константу