Junior #hooks#useRef#useState
useRef khác useState thế nào? Khi nào dùng ref?
⚡ Trả lời nhanh
useState giữ giá trị giữa các lần render và đổi nó thì trigger re-render. useRef giữ một object mutable ref.current tồn tại suốt vòng đời, đổi ref.current không gây render. Dùng ref cho DOM node, timer id, giá trị không ảnh hưởng UI.
useState | useRef | |
|---|---|---|
| Đổi giá trị | Re-render | Không re-render |
| Cập nhật | Qua setter, theo lượt | Gán trực tiếp ref.current |
| Dùng cho | Dữ liệu hiển thị trên UI | DOM, id timer, giá trị trước đó |
function SearchBox() {
const inputRef = useRef(null);
const timerRef = useRef();
const onChange = () => {
clearTimeout(timerRef.current);
timerRef.current = setTimeout(() => search(inputRef.current.value), 300);
};
return <input ref={inputRef} onChange={onChange} />;
}
Ref cũng dùng được cho input uncontrolled: đọc giá trị khi submit thay vì lưu từng ký tự vào state.