React의 forwardRef를 사용해 입력 컴포넌트를 만드는 방법에서 타입스크립트의 활용과 컴포넌트 설계 원리
import React, { ForwardedRef } from 'react';
import InputTextStyle from './InputTextStyle';
interface Props {
placeholder?: string;
}
const InputText = React.forwardRef(({ placeholder }: Props, ref: ForwardedRef<HTMLInputElement>) => {
return (
<InputTextStyle placeholder={placeholder} ref={ref}>
input text
</InputTextStyle>
);
});
export default InputText;
import styled from 'styled-components';
const InputTextStyle = styled.input.attrs({ type: 'text' })``;
export default InputTextStyle;
컴포넌트의 속성을 타입스크립트로 정의하여 타입 안정성을 제공.
interface Props {
placeholder?: string;
}
const InputText = React.forwardRef(({ placeholder }: Props, ref: ForwardedRef<HTMLInputElement>) => {
return (
<InputTextStyle placeholder={placeholder} ref={ref} />
);
});
React.forwardRef는 React에서 컴포넌트에 전달된 ref를
해당 컴포넌트의 DOM 요소나 자식 컴포넌트로 전달할 수 있도록 돕는 API.
일반적으로 부모 컴포넌트가 자식 컴포넌트 내부의 DOM 요소를 직접 제어해야 하는 상황에서 사용
함수형 컴포넌트.React.forwardRef는 두 가지 매개변수를 받는 컴포넌트를 반환
Props: 컴포넌트에 전달된 일반 속성들
Ref: 부모 컴포넌트로부터 전달된 ref
React.forwardRef로 감싼 컴포넌트는 이 두 값을 분리해 적절히 사용 가능.
HTML 태그에 스타일을 적용하는 방식으로 활용.
const InputTextStyle = styled.input.attrs({ type: 'text' })``;
기본 속성을 설정. 이 경우 type="text"가 기본값으로 지정.
attrs를 사용하면 반복적인 속성 설정을 줄일 수 있다.
예시:
const InputTextStyle = styled.input.attrs({ type: 'text' })`
font-size: 1rem;
padding: 0.5rem;
border: 1px solid #ccc;
border-radius: 4px;
`;