Rumah >hujung hadapan web >tutorial js >Menguasai React's useRef Hook: Bekerja dengan DOM dan Nilai Boleh Berubah
Cakuk useRef ialah cangkuk React terbina dalam yang digunakan untuk mengekalkan nilai merentas pemaparan tanpa menyebabkan pemaparan semula. Ia sering digunakan untuk berinteraksi dengan elemen DOM secara langsung dan untuk menyimpan nilai yang perlu berterusan antara pemaparan tetapi tidak semestinya perlu mencetuskan pemaparan semula.
Kail useRef digunakan terutamanya untuk dua tujuan:
const myRef = useRef(initialValue);
Objek rujukan yang dikembalikan oleh useRef mempunyai sifat semasa, di mana nilai sebenar disimpan.
const MyComponent = () => { const inputRef = useRef(null); const focusInput = () => { // Access the DOM node and focus it inputRef.current.focus(); }; return ( <div> <input ref={inputRef} /> <button onClick={focusInput}>Focus Input</button> </div> ); };
const TimerComponent = () => { const countRef = useRef(0); const increment = () => { countRef.current++; console.log(countRef.current); // This will log the updated value }; return ( <div> <p>Current count (does not trigger re-render): {countRef.current}</p> <button onClick={increment}>Increment</button> </div> ); };
const ScrollToTop = () => { const topRef = useRef(null); const scrollToTop = () => { topRef.current.scrollIntoView({ behavior: 'smooth' }); }; return ( <div> <div ref={topRef}> <ol> <li> <strong>Storing Previous State</strong>: If you need to track the previous value of a prop or state value. </li> </ol> <pre class="brush:php;toolbar:false"> const PreviousState = ({ count }) => { const prevCountRef = useRef(); useEffect(() => { prevCountRef.current = count; // Store the current value in the ref }, [count]); return ( <div> <p>Current Count: {count}</p> <p>Previous Count: {prevCountRef.current}</p> </div> ); };
Mengelakkan Paparan Semula untuk Nilai Kompleks: Jika anda mempunyai objek besar atau struktur data kompleks yang tidak perlu mencetuskan pemaparan semula, useRef boleh menyimpannya tanpa menjejaskan komponen prestasi.
Selang Penjejakan atau Tamat Masa: Anda boleh menyimpan ID tamat masa atau selang untuk mengosongkannya kemudian.
const myRef = useRef(initialValue);
Feature | useRef | useState |
---|---|---|
Triggers re-render | No (does not trigger a re-render) | Yes (triggers a re-render when state changes) |
Use Case | Storing mutable values or DOM references | Storing state that affects rendering |
Value storage | Stored in current property | Stored in state variable |
Persistence across renders | Yes (keeps value across renders without triggering re-render) | Yes (but triggers re-render when updated) |
Berikut ialah contoh di mana useRef digunakan untuk pengesahan borang, memfokuskan pada medan input apabila ia tidak sah.
import React, { useRef, useState } daripada 'react'; const FormComponent = () => { const inputRef = useRef(); const [inputValue, setInputValue] = useState(''); const [ralat, setError] = useState(''); const validateInput = () => { jika (inputValue === '') { setError('Input tidak boleh kosong'); inputRef.current.focus(); // Fokuskan elemen input } lain { setError(''); } }; kembali ( <div> <masukan ref={inputRef} type="text" value={inputValue} onChange={(e) => setInputValue(e.target.value)} /> {ralat && <p>
Kail useRef sangat berguna untuk menangani nilai boleh ubah dan manipulasi DOM langsung dalam React. Sama ada anda bekerja dengan elemen borang, menjejaki keadaan sebelumnya atau berinteraksi dengan perpustakaan pihak ketiga, useRef menyediakan penyelesaian yang bersih dan cekap. Dengan menggunakan useRef, anda boleh mengekalkan kegigihan tanpa mencetuskan pemaparan semula yang tidak perlu, yang menjadikannya pilihan terbaik untuk operasi sensitif prestasi.
Atas ialah kandungan terperinci Menguasai React's useRef Hook: Bekerja dengan DOM dan Nilai Boleh Berubah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!