The differences between useState and useRef
Use useState when
-You need to manage local state within a component.
-You want the component to re-render when the state changes.
-You need to store primitive values like strings, numbers, or booleans.
Use useRef when
-You need to store a value that should persist across renders but not trigger a re-render when it changes.
-You need to access DOM elements directly.
-You need to store mutable objects.
Example
Let's consider a real-life example of a form with validation. In this scenario, we will use both useState and useRef to demonstrate their respective use-cases.
CODE:
import React, { useState, useRef } from "react";
export function App(props) {
  const [email, setEmail] = useState("");
  const [password, setPassword] = useState("");
  const [isValid, setIsValid] = useState(false);
  const emailInputRef = useRef();
  const validateForm = () => {
    setIsValid(email.includes("@") && password.length >= 8);
  };
  const handleSubmit = (e) => {
    e.preventDefault();
    if (!isValid) {
      emailInputRef.current.focus();
    } else {
      // Submit Action
    }
  };
  return (
    <form onSubmit={handleSubmit}>
      <input
        type="email"
        value={email}
        ref={emailInputRef}
        onChange={(e) => setEmail(e.target.value)}
        onBlur={validateForm}
        placeholder="Email"
      />
      <input
        type="password"
        value={password}
        onChange={(e) => setPassword(e.target.value)}
        onBlur={validateForm}
        placeholder="Password"
      />
      <button type="submit">Sign Up</button>
      {!isValid && <p style={{"color": "red"}}>Please enter a valid email and password.</p>}
    </form>
  );
}
In this example, we use useState to manage the email, password, and validation state. We also use useRef to create a reference to the email input element, which allows us to focus on it if the form is not valid upon submission
 
 
              


 
    
Top comments (0)