[250916] TIL

Today I Learned (2025-09-16)

React DevTools

  • ๋ธŒ๋ผ์šฐ์ € ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ
  • Tab.displayName = 'Tab'
    • HOC(๊ณ ์ฐจ ์ปดํฌ๋„ŒํŠธ)๋‚˜ forwardRef/memo๋ฅผ ์“ฐ๋ฉด ์ด๋ฆ„์ด ๊นจ์ง€๋Š”๋ฐ ์„ค์ • ํ•ด์ฃผ๋ฉด DevTools์— Tab์œผ๋กœ ํ‘œ์‹œ๋œ๋‹ค.
  • ๋ฆฌ๋ Œ๋”๋ง ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

HOC (๊ณ ์ฐจ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ)

  • React์—์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋กœ์ง์„ ์ถ”์ƒํ™”ํ•˜๋Š” ํŒจํ„ด
  • ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„์„œ ์ƒˆ๋กœ์šด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋œปํ•จ
const withAuth = (WrappedComponent) => {
  return (props) => {
    if (!props.isLoggedIn) {
      return <div>๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค</div>;
    }
    return <WrappedComponent {...props} />;
  };
};
const Profile = (props) => <div>{props.user.name}์˜ ํ”„๋กœํ•„</div>;
const ProtectedProfile = withAuth(Profile);

์š”์ฆ˜์€ ์ปค์Šคํ…€ํ›…์œผ๋กœ ์‚ฌ์šฉ

// ์ธ์ฆ ์—ฌ๋ถ€๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ›…
function useAuth() {
  const [isLoggedIn, setIsLoggedIn] = React.useState(false);
  const [user, setUser] = React.useState(null);

  React.useEffect(() => {
    // ์˜ˆ: ํ† ํฐ ์ฒดํฌ, API ํ˜ธ์ถœ ๋“ฑ
    const token = localStorage.getItem("token");
    if (token) {
      setIsLoggedIn(true);
      setUser({ name: "์ˆ˜์ง€" });
    }
  }, []);

  return { isLoggedIn, user };
}

// ์ปดํฌ๋„ŒํŠธ์—์„œ ์ง์ ‘ ์‚ฌ์šฉ
function Profile() {
  const { isLoggedIn, user } = useAuth();

  if (!isLoggedIn) {
    return <div>๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค</div>;
  }

  return <div>{user.name}์˜ ํ”„๋กœํ•„</div>;
}


# forwordRef

- React ์—์„œ ref๋ฅผ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ณ ์ฐจ ์ปดํฌ๋„ŒํŠธ (HOC)
- https://ko.react.dev/reference/react/forwardRef
- ํ–ฅํ›„ ์‚ฌ์šฉ ์ค‘๋‹จ ๋  ์˜ˆ์ •์ธ API ์‚ฌ์šฉ์ค‘
  -> React 19 ์ด์ƒ๋ถ€ํ„ฐ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š๋Š”๋ฐ ์‚ฌ์šฉ์ค‘, ๋ฐ”๊ฟ”์•ผํ• ๋“ฏ

React 19๋ถ€ํ„ฐ๋Š” ๋” ์ด์ƒ forwardRef์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ œ ref๋ฅผ Prop์œผ๋กœ ์ง์ ‘ ์ „๋‹ฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

forwardRef๋Š” ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค์—์„œ ์‚ฌ์šฉ ์ค‘๋‹จDeprecated๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•˜์„ธ์š”.

Categories:

Updated:

Leave a comment