React useState Hook'u kullanmanın standart yolu şudur:
const [count, setCount] = useState(0);
Ancak bu const count
değişken açıkça farklı bir ilkel değere atanacaktır.
O zaman değişken neden olarak tanımlanmadı let count
?
React useState Hook'u kullanmanın standart yolu şudur:
const [count, setCount] = useState(0);
Ancak bu const count
değişken açıkça farklı bir ilkel değere atanacaktır.
O zaman değişken neden olarak tanımlanmadı let count
?
Yanıtlar:
açıkça farklı bir ilkel değere atanacak
Pek sayılmaz. Bileşen yeniden oluşturulduğunda, işlev yeniden yürütülür, yeni bir kapsam oluşturur count
ve önceki değişkenle ilgisi olmayan yeni bir değişken oluşturur .
Misal:
let _state;
let _initialized = false;
function useState(initialValue) {
if (!_initialized) {
_state = initialValue;
_initialized = true;
}
return [_state, v => _state = v];
}
function Component() {
const [count, setCount] = useState(0);
console.log(count);
setCount(count + 1);
}
Component();
Component(); // in reality `setCount` somehow triggers a rerender, calling Component again
Component(); // another rerender
Not: Kancalar çok daha karmaşıktır ve aslında bu şekilde uygulanmaz. Bu sadece benzer bir davranışı göstermek içindir.
const
referansın değerini aynı kapsamda yeniden atamaya karşı bir korumadır.
Gönderen MDN'yi
Sahip olduğu değerin değişmez olduğu anlamına gelmez, sadece değişken tanımlayıcının yeniden atanamayacağı anlamına gelir.
Ayrıca
Sabit, adını aynı kapsamdaki bir işlev veya değişkenle paylaşamaz.
SetCount çağrıldıktan sonra bileşen yeniden gönderilir ve yeni useState çağrısı yeni değeri döndürür. Mesele şu ki, sayı değişmez. Yani burada yazım hatası yok.
Teknik olarak her renderde yeni bir değişkendir.
Kaynak: React Github sorunu: Dokümanlar - Kancalar: bu const bir yazım hatası mı?
burada sayının değişmesi gerektiğinden const'un sinir bozucu olduğunu buldum
let [count, setCount] = useState(0)
// simply can't use ++ on either side of count increment given we declare as const [count, setCount]
// instead declaration of var or let [count, setCount] allows simpler code
const increment = () => {
setCount(count++); //const cannot do this only let or var
};