λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

React

[ React ] React 19 RC에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μž

 

 

 

React19 RC(Release Candidate)λŠ” ν˜„μž¬ 개발 쀑이며 2024λ…„ 9μ›” κΈ°μ€€μœΌλ‘œ 아직 정식 μΆœμ‹œλ˜μ§€ μ•Šμ•˜λ‹€.

 

 

κ°€μž₯ μ΅œμ‹  정보(2024λ…„ 4μ›” κΈ°μ€€, React Blog μ°Έκ³ )λ₯Ό λ°”νƒ•μœΌλ‘œ μ„€λͺ…ν•˜μžλ©΄ React 19λŠ” 이전 버전듀과 비ꡐ해 λͺ‡ 가지 μ£Όμš” κ°œμ„ μ‚¬ν•­κ³Ό μƒˆλ‘œμš΄ κΈ°λŠ₯듀을 포함할 κ²ƒμœΌλ‘œ μ˜ˆμƒλœλ‹€.

 

 

  1. μ„±λŠ₯ κ°œμ„ : λ Œλ”λ§κ³Ό μƒνƒœ μ—…λ°μ΄νŠΈ μ„±λŠ₯이 ν–₯상될 전망.
  2. μ„œλ²„ μ»΄ν¬λ„ŒνŠΈ: μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§μ„ λ”μš± 효율적으둜 λ§Œλ“€μ–΄μ£ΌλŠ” μ„œλ²„ μ»΄ν¬λ„ŒνŠΈμ˜ μ™„μ „ν•œ κ΅¬ν˜„μ΄ 포함될 κ°€λŠ₯성이 λ†’λ‹€.
  3. λ™μ‹œμ„± κΈ°λŠ₯ κ°œμ„ : React 18μ—μ„œ λ„μž…λœ λ™μ‹œμ„± κΈ°λŠ₯듀이 λ”μš± μ•ˆμ •ν™”λ˜κ³  λ°œμ „λ  κ²ƒμœΌλ‘œ μ˜ˆμƒ.
  4. μƒˆλ‘œμš΄ ν›…: κ°œλ°œμžλ“€μ˜ μž‘μ—…μ„ λ”μš± νŽΈλ¦¬ν•˜κ²Œ λ§Œλ“€μ–΄μ€„ μƒˆλ‘œμš΄ 훅듀이 좔가될 수 μžˆλ‹€.
  5. νƒ€μž…μŠ€ν¬λ¦½νŠΈ 지원 κ°•ν™”: νƒ€μž…μŠ€ν¬λ¦½νŠΈμ™€μ˜ 톡합이 λ”μš± 강화될 κ²ƒμœΌλ‘œ 보인닀.

 

 


 

 

 

Actions

κΈ°μ‘΄μ—λŠ” pending, states, errors, optimistic updates, sequential requests 등에 λŒ€ν•œ μ•‘μ…˜μ„ μˆ˜λ™μœΌλ‘œ μ²˜λ¦¬ν•΄μ•Ό ν–ˆλ‹€.

 

// Before Actions

function UpdateName({}) {
  const [name, setName] = useState("");
  const [error, setError] = useState(null);
  const [isPending, setIsPending] = useState(false);

  const handleSubmit = async () => {
    setIsPending(true);
    const error = await updateName(name);
    setIsPending(false);
    if (error) {
      setError(error);
      return;
    } 
    redirect("/path");
  };

  return (
    <div>
      <input value={name} onChange={(event) => setName(event.target.value)} />
      <button onClick={handleSubmit} disabled={isPending}>
        Update
      </button>
      {error && <p>{error}</p>}
    </div>
  );
}

 

 

 

ν•˜μ§€λ§Œ, React 19 μ—μ„œλŠ” μ „ν™˜(transitions)μ—μ„œ 비동기 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬, pending, states, errors, optimistic updates, sequential requests 등에 λŒ€ν•œ μ•‘μ…˜μ„ μžλ™μœΌλ‘œ μ²˜λ¦¬ν•  수 μžˆλŠ” 지원이 μΆ”κ°€λœλ‹€. 예λ₯Ό λ“€μ–΄ μ•„λž˜μ™€ 같은 useTransition 을 μ‚¬μš©ν•  수 μžˆλ‹€.

 

 

// Using pending state from Actions

function UpdateName({}) {
  const [name, setName] = useState("");
  const [error, setError] = useState(null);
  const [isPending, startTransition] = useTransition();

  const handleSubmit = () => {
    startTransition(async () => {
      const error = await updateName(name);
      if (error) {
        setError(error);
        return;
      } 
      redirect("/path");
    })
  };

  return (
    <div>
      <input value={name} onChange={(event) => setName(event.target.value)} />
      <button onClick={handleSubmit} disabled={isPending}>
        Update
      </button>
      {error && <p>{error}</p>}
    </div>
  );
}

 

 

 

 

 

 

 

 

 

λ˜ν•œ Actions의 일반적인 μ‚¬μš© 사둀λ₯Ό 더 μ‰½κ²Œ λ§Œλ“€κΈ° μœ„ν•΄ useActionStateλΌλŠ” μƒˆλ‘œμš΄ hook이 μΆ”κ°€λ˜μ—ˆλ‹€.

이 hook은 ν•¨μˆ˜λ₯Ό 인자둜 λ°›κ³ , ν˜ΈμΆœν•  수 μžˆλŠ” λž˜ν•‘λœ Action을 λ°˜ν™˜ν•œλ‹€. λž˜ν•‘λœ Action이 호좜될 λ•Œ, useActionStateλŠ” Action의 λ§ˆμ§€λ§‰ κ²°κ³Όλ₯Ό data둜, Action의 λŒ€κΈ° μƒνƒœλ₯Ό pending으둜 λ°˜ν™˜ν•œλ‹€.

 

const [error, submitAction, isPending] = useActionState(
  async (previousState, newName) => {
    const error = await updateName(newName);
    if (error) {
      // You can return any result of the action.
      // Here, we return only the error.
      return error;
    }

    // handle success
    return null;
  },
  null,
);

 

 

 

 

 

 

μ†Œκ°œλœ μ •ν™•ν•œ κΈ°λŠ₯κ³Ό 변경사항은 곡식 μΆœμ‹œ μ „κΉŒμ§€ 계속 μˆ˜μ •λ  수 있으며, μΆ”κ°€μ μœΌλ‘œ React 19의 μ •ν™•ν•œ 세뢀사항을 μ•Œκ³  μ‹Άλ‹€λ©΄, React 곡식 λΈ”λ‘œκ·Έλ‚˜ GitHub μ €μž₯μ†Œλ₯Ό ν™•μΈν•˜λ©΄ λœλ‹€.

 

 

 

 

 

 

 

 

 

 

 


 

🌸 좜처 🌸

 

React 19 RC