클래스형 컴포넌트
- 앞에서 보았던
App
컴포넌트는 함수형 컴포넌트입니다. - 다른 컴포넌트 선언 방식인 클래스형 컴포넌트를 작성 해 볼 겁니다. - Typescript
//위에 항상 들어가야 합니다.
//import React from 'react'
// (...)
import { Component } from 'react'
class App extends Component {
render() : JSX.Element {
//const name = 'react' 도 상관없습니다.
const name : string = 'react';
return <div className="react">{ name }</div>
}
}
export default App;
src
디렉토리에MyComponent.tsx
파일을 생성해 보세요.
MyComponent.tsx
const MyComponent = () : JSX.Element => {
return <div>나의 새롭고 멋진 컴포넌트</div>;
}
export default MyComponent;
- 그리고
App
컴포넌트에서MyComponent
를 불러옵니다.
App.tsx
import MyComponent from './MyComponent';
const App = () : JSX.Element => {
return <MyComponent/>;
}
export default App;
따로
<div>
문법을 사용하지 않아도MyComponent
에서 JSX.Element 를 보내준다.따라서
App
의 리턴 값은 같다.
결과값
props 에 대해서.
간단요약
"부모 컴포넌트"가 "자식 컴포넌트"에게 값을 정해주는 것을 의미.
ex -
App
컴포넌트는MyComponent
를 불렀으므로,App
컴포넌트가MyComponent
의 값을props
로 정해주는 것이 가능.
본격적인 Typescript 문법 알기!!!!
interface propFace {
name : string;
}
or
type propFace = {
name : string;
}
// const ({props} : propFace) = 할당받는 변수;
App
컴포넌트가MyComponent
에게name
이라는props
를 전달하게 되는데,
이 과정에서props
로 받는 타입을 지정 해 주어야 한다. - "무조건"어짜피
Typescript
를 적용하기로 한 이상, 수 천번은 쓰게 될 테니 익히는 것이 좋습니다.
적용 시간
App.tsx
// (...)
import MyComponent from './MyComponent'
const App = () : JSX.Element => {
return <MyComponent name="React" />;
}
export default App;
MyComponent.tsx
// (...)
interface propFace{
name : string
}
const MyComponent = ({ props } : propFace) => {
return <div>Hello, My name is {props.name} 입니다. </div>
}
props
의 타입을 항상 지정 해 주어야 합니다props
로 오는 값은{name : string}
이라고 정하는 것 입니다.any
를 사용해서 에러를 바로 없앨 수 있지만,typescript
를 사용하는 의미가 없어집니다!
props 기본값 설정 : defaultProps - Typescript
typescript
의 가장 중요한 규칙은 모든 변수는 정확하게 규명이 되어야 한다는 것 입니다.defaultProps
로props
로 오는 변수 중name
을 선언한다면,App.tsx
에서name
을 "props"로 보내 주지 않아도 에러가 나지 않습니다.이는
Typescript
의 장점 중 하나입니다.어떤 상황이던, 방법이던지, 타입이 규명 된다면 에러가 나지 않습니다.
아래의 코드를 참조하시면 이해가 될 겁니다!
App.tsx
// (...)
import MyComponent from './MyComponent';
const App = () : JSX.Element => {
return <MyComponent />;
}
export default App;
MyComponent.tsx
// (...)
interface propFace{
name : string;
}
const MyComponent = (props : propFace) => {
return <div>Hello, My Name is {props.name}!</div>;
};
MyComponent.defaultProps = {
name : '기본 이름'
};
export default MyComponent;
분명
App.tsx
에서props
값으로 아무것도 보내주지 않았지만, 에러가 나지 않습니다.이는
defaultProps
의 특성으로,props
값으로name
이 오지 않을 수 있다고 선언
한 것입니다.이는 타입을 분명이 정해 놓아야 하지만, 자동으로 타입을 유연하게 알아 차리는
typescript
의 장점입니다.
태그 사이의 내용을 보여 주는 children
props
로 태그 사이에 오브젝트를 넣어 전달 해 줄 수 있습니다.props.children
으로 참조 할 수 있습니다.
App.tsx
// (...)
import MyComponent from './MyComponent';
const App = () : JSX.Element => {
return <MyComponent>리액트</MyComponent>;
};
export default App;
MyComponent.tsx
// (...)
interface propFace{
name : string;
children : string;
}
const MyComponent = props : propFace => {
return(
<div>
Hello, My name is { props.name } <br/>
The Value children is { props.children }.
</div>
)
};
MyComponent.defaultProps = {
name : 'default name'
};
export default MyComponent;
App.tsx
에서<MyComponent>
태그 사용 시, 사이에 string 타입이 들어갔습니다.태그 사이의 내용은
children
으로 지정 되며, 하위 컴포넌트에서 지정하면 됩니다.
'React > 리액트를 다루는 기술 + Typescript' 카테고리의 다른 글
Chapter3_3 - State 사용하기 (0) | 2024.06.27 |
---|---|
Chapter3_2 - 비구조화 할당을 통해 props 값 추출하기 (0) | 2024.06.27 |
Chapter2 - 리액트와 Typescript 간단 적용 예제 (0) | 2024.06.26 |
Chapter0 - 리액트에 Typescript 적용하기 (0) | 2024.06.26 |
Chapter1 - 리액트 개요와 설치 방법 (0) | 2024.06.26 |