React Hooks memberi kita opsi useState, dan saya selalu melihat perbandingan Hooks vs Class-State. Tetapi bagaimana dengan Hooks dan beberapa variabel reguler?
Sebagai contoh,
function Foo() {
let a = 0;
a = 1;
return <div>{a}</div>;
}
Saya tidak menggunakan Hooks, dan itu akan memberi saya hasil yang sama seperti:
function Foo() {
const [a, setA] = useState(0);
if (a != 1) setA(1); // to avoid infinite-loop
return <div>{a}</div>;
}
Jadi apa bedanya? Menggunakan Hooks lebih rumit lagi untuk kasus itu ... Jadi mengapa mulai menggunakannya?
javascript
node.js
reactjs
react-hooks
Moshe Nagar
sumber
sumber
let a = 1; return <div>{a}</div>
dan Anda akan mendapatkan hasil yang sama.Jawaban:
Alasannya adalah jika Anda
useState
mengubah tampilan. Variabel sendiri hanya mengubah bit dalam memori dan keadaan aplikasi Anda bisa tidak sinkron dengan tampilan.Bandingkan contoh ini:
Dalam kedua kasus,
a
perubahan pada klik tetapi hanya ketika Anda menggunakanuseState
tampilan dengan benar menunjukkana
nilai saat ini.sumber
a
akan menjadi sampah yang dikumpulkan setelah selesai dieksekusi, sedangkan pada yang pertama, karena meningkatkannyauseState
akan mempertahankan nilaia
useRef
jika dia tidak ingin membuat kembali tampilan. Pertanyaannya tetap apakah dia harus menggunakan variabel lokal atau Bereaksi referensi. Misalnya jika Anda memiliki batas waktu yang perlu Anda hapus, atau permintaan http yang sedang berjalan menggunakan aksioma, apakah Anda menyimpan sumber waktu habis atau sumber aksioma dalam variabel atau dalam React ref?useRef
(jika Anda tidak ingin rerender) atauuseState
(jika Anda ingin rerender). Dalam kasus timer, karena mereka adalah efek samping, mereka harus dimulai denganuseEffect
kaitan. Jika AndatimerId
hanya ingin untuk tujuan pembersihan, Anda dapat menyimpannya dalam variabel lokal handler . Jika Anda ingin dapat menghapus timer dari tempat lain di komponen, Anda harus menggunakanuseRef
. MenyimpantimerId
dalam variabel lokal komponen akan menjadi kesalahan karena vars lokal "reset" pada setiap render.Status pemutakhiran akan membuat komponen untuk merender kembali, tetapi nilai lokal tidak.
Dalam kasus Anda, Anda memberikan nilai itu di komponen Anda. Itu berarti, ketika nilainya diubah, komponen harus dirender ulang untuk menunjukkan nilai yang diperbarui.
Jadi akan lebih baik untuk digunakan
useState
daripada nilai lokal normal.sumber
Contoh pertama Anda hanya berfungsi karena data dasarnya tidak pernah berubah. Titik masuk menggunakan
setState
adalah untuk merender seluruh komponen Anda ketika negara hang. Jadi, jika contoh Anda memerlukan semacam perubahan atau manajemen negara, Anda akan segera menyadari bahwa nilai perubahan diperlukan dan untuk memperbarui tampilan dengan nilai variabel, Anda akan memerlukan status dan rerendering.sumber
setara dengan
Apa yang
useState
dikembalikan adalah dua hal:jika Anda menelepon,
setA(1)
Anda akan meneleponthis.setState({ a: 1 })
dan memicu render ulang.sumber
Variabel lokal akan disetel ulang setiap render saat mutasi sedangkan negara akan memperbarui:
sumber