πŸ“styled-component μ˜€λ²„λΌμ΄λ”©

10_2pangΒ·2023λ…„ 6μ›” 5일
0

βš½οΈνŠΈλŸ¬λΈ”μŠˆνŒ…

λͺ©λ‘ 보기
27/94
post-thumbnail

πŸ‘¨β€πŸ’»Β μ‚¬κ±΄


  • 각 μ‚¬μ΄μ¦ˆμ— 맞게, λ²„νŠΌ μŠ€νƒ€μΌλ“œ μ»΄ν¬λ„ŒνŠΈλ₯Ό μž‘μ„±ν•˜κ³  μžˆμ—ˆλ‹€. κ·ΈλŸ¬λ‹€ 문득, 정말 μž‘μ€ λΆ€λΆ„λ§Œ μˆ˜μ •ν•˜λŠ” κ²½μš°κ°€ 생기면 λ”°λ‘œ νŠΉμ΄μΌ€μ΄μŠ€λ₯Ό μƒμ„±ν•˜λŠ”κ²Œ λ§žλŠ”μ§€, μ•„λ‹ˆλ©΄ μ˜€λ²„λΌμ΄λ”© μ‹œμΌœμ„œ 단 ν•œλ²ˆλ§Œ μ‚¬μš©ν•˜λ„λ‘ ν• μ§€ 고민이 λ˜μ—ˆλ‹€. λ§Œμ•½ 단 ν•œλ²ˆλ§Œ μ“΄λ‹€λ©΄, μ˜€λ²„λΌμ΄λ”© ν•˜μ—¬ μŠ€νƒ€μΌ μˆ˜μ •ν•˜λŠ” 것이 λ§žλ‹€κ³  νŒλ‹¨ν•˜μ—¬ ν•œλ²ˆ μ‹œλ„ν•΄ λ³΄μ•˜λ‹€.
  • μ»΄ν¬λ„ŒνŠΈ 자체λ₯Ό λ“€κ³ μ™€μ„œ styled-componentλ₯Ό λ”°λ‘œ μ‹œν‚€κΈ°
    function App() {
      return (
        <>
    	    <GlobalStyle />
            <ScreenPage className='hidden-scroll'>
              <h1>κ°€μ Έλ„λŒ•λƒ₯ ν”„λ‘œμ νŠΈ</h1>
              <Button size='L'>λ‹€μŒ</Button>
              <TestBtn size='L'>λ‹€μŒ</TestBtn>
            </ScreenPage>
        </>
      );
    }
    // μŠ€νƒ€μΌ μ˜€λ²„λΌμ΄λ”© 기법
    const TestBtn = styled(Button)`
      && {
        /* height: 200rem; */
        margin-top: 400px;
      }
    `;
    • μœ„μ™€ 같이 ν•˜λ©΄, μŠ€νƒ€μΌμ΄ λ¨Ήνžˆμ§€ μ•ŠλŠ”λ‹€.

βœ…Β ν•΄κ²°


  • 일단 styled-component λŠ” componentStyle.rules 에 μŠ€νƒ€μΌμ΄ 지정이 λ˜μ–΄, λ¨Ήμ΄λŠ” ν˜•μ‹μ΄λ‹€.
    이 적용된 μŠ€νƒ€μΌμ€, styled μ»΄ν¬λ„ŒνŠΈλ‘œ 톡해 μƒμ„±λœ 2개의 클래슀 쀑 ν›„μžμ˜ ν΄λž˜μŠ€μ— μ μš©μ΄λœλ‹€.
    κ·ΈλŸ¬λ‚˜, className 이 선언이 λ˜μ§€ μ•ŠλŠ”λ‹€λ©΄, Button 에 μŠ€νƒ€μΌμ„ 먹이면 μΆ”κ°€λ‘œ className 이 μƒμ„±λ˜μ§€ μ•ŠλŠ”λ‹€. 그럼 κ³Όμ—° className 을 μ„ μ–Έν•˜κ³  props둜 μ „λ‹¬λ°›μœΌλ©΄ μ–΄λ–¨κΉŒ ν•˜μ—¬ μ‹œλ„ν•΄λ³΄μ•˜λ‹€.
function App(**{className}**) {
  return (
    <>
	    <GlobalStyle />
        <ScreenPage className='hidden-scroll'>
          <h1>κ°€μ Έλ„λŒ•λƒ₯ ν”„λ‘œμ νŠΈ</h1>
          <Button size='L'>λ‹€μŒ</Button>
          <TestBtn **className={className}** size='L'>λ‹€μŒ</TestBtn>
        </ScreenPage>
    </>
  );
}
// μŠ€νƒ€μΌ μ˜€λ²„λΌμ΄λ”© 기법
const TestBtn = styled(Button)`
  && {
    /* height: 200rem; */
    margin-top: 400px;
  }
`;
const Button = ({ children, size, **className** }) => {
  return (
    <StyledButton **className={className}** size={size}>
      {children}
    </StyledButton>
  );
};

이런 ν˜•νƒœλ‘œ, className 을 선언을 ν•΄λ‘λ‹ˆ, styled-component μ—μ„œ μƒμ„±ν•œ μŠ€νƒ€μΌμ΄ λ“€μ–΄μžˆλŠ” ν΄λž˜μŠ€κ°€ λ“€μ–΄κ°”λ‹€. λ‚˜μ˜ μΆ”μΈ‘μœΌλ‘œλŠ”, 클래슀 μ»΄ν¬λ„ŒνŠΈλ₯Ό 섀정을 ν•˜λ©΄ className 이 μž„μ˜λ‘œ 섀정이 λ˜μ§€λ§Œ, 이에 또 className 을 μΆ”κ°€λ‘œ μ§€μ •ν•˜λŠ” κ²½μš°μ—λŠ” 경둜λ₯Ό 미리 열어두어야 λ¨ΉνžˆλŠ” λ“―ν•œ λŠλ‚Œμ΄μ˜€λ‹€.

β†’ styled-component 의 className 이 μ˜€λ²„λΌμ΄λ”©ν•˜μ—¬ μΆ”κ°€λ₯Ό μœ„ν•΄μ„œλŠ”, λ¨Όμ € className 을 μ§€μ •ν•΄λ‘μ–΄μ•Όν•œλ‹€. ( 경둜λ₯Ό 미리 μ„€μ •ν•΄ λ‘λŠ” ν˜•μ‹μ΄λ‹€. )

πŸ’­Β κ°œμ„ 


{…rest} λ₯Ό ν†΅ν•˜μ—¬, μ§€μ •ν•œ props μ œμ™Έν•œ λ‚˜λ¨Έμ§€ 둜 λ‚΄λ €μ˜€λŠ” 값듀을 λ‹€ λ”°λ‘œ μ €μž₯을 ν•΄λ‘”λ‹€λ©΄, μ•žμ„œ ν–ˆλ˜ className 을 λ”°λ‘œ μ•ˆλ°›μ•„λ„ λœλ‹€. μŠ€νƒ€μΌλ“œμ»΄ν¬λ„ŒνŠΈκ°€ 먹인 ν΄λž˜μŠ€λ“€μ΄ …rest 에 λ“€μ–΄κ°€ 섀정이 λ˜κΈ°λ•Œλ¬Έμ΄λ‹€. (경둜 섀정을 ν•΄λ‘” λŠλ‚Œ)

const Button = ({ children, size, **...rest** }) => {
  return (
    <StyledButton size={size} **{...rest}**>
      {children}
    </StyledButton>
  );
};
profile
μ£Όλ‹ˆμ–΄ ν”„λ‘ νŠΈμ—”λ“œ 개발자 이광렬 μž…λ‹ˆλ‹€ 🌸

0개의 λŒ“κΈ€