import React from 'react';
import type {FC} from 'react';
import {Text} from 'react-native';
import * as D from '../data';
export type PersonProps = {
person: D.IPerson;
};
// -1-
export default function Person({person}: PersonProps) {
return <Text>{JSON.stringify(person, null, 2)}</Text>;
}
// -1-
// -2-
export const Person2: FC<PersonProps> = ({person}) => {
return <Text>{JSON.stringify(person, null, 2)}</Text>;
};
// -2-
function
을 사용해서 props
형식으로 가져와서 사용했다.FC(FunctionComponent)
를 사용한 props 설정이 둘에는 어떤 차이점이 있는가
일단 렌더링 상에서는 차이가 없음
Stack overflow를 찾아본 결과 나와 같은 생각을 하는 사람이 많다는 사실을 알게됨
그 내용을 정리해보려고 함
요즘 찾아보면 함수형으로 작성되는 export function 형이 더 많음
import React from 'react';
import {SafeAreaView, Text} from 'react-native';
import type {FC} from 'react';
type GreetingProps = {
name: string;
};
export const Greeting: FC<GreetingProps> = ({name}) => {
// name is string!
return <Text>안녕 {name}</Text>;
};
// function Greeting2({name}: GreetingProps) {
// return <Text>Hello {name}</Text>;
// }
export default function App() {
return (
<SafeAreaView>
<Greeting name="ww8007">
<Text>"아무것도 안보임"</Text> // -1-
</Greeting>
</SafeAreaView>
);
}
위의 코드에서
Greeting
자체가children
을 이미 포함해서 내보내고 있음
- 오류가 날 코드인데 기본적으로 오류가 안생김
- 심지어 children으로 쓴 구문이 보이지가 않음
- 주석 처리된Greeting2
를 사용하면<Text>
부분 오류생겨 쓰지도 못함
만약 children 사용하고 싶으면 이렇게 사용
type WithChildren<T = {}> =
T & { children?: React.ReactNode };
type CardProps = WithChildren<{
title: string
}>
defaultProps
를 사용할 수 없다.class 기반
지만 사용하고 싶은 경우가 있을 수 있음[정리]
내가 알고 있던 대로function
을 사용한component
를 생성하는게 더 좋다.
물론 FC를 사용하는게 잘못된 방법도 아니고 맞는 방법임
하지만 children에 대한 명시를 계속해주면서 코드를 작성한다는 점이 좋게 와닿지 않음...
import { PropsWithChildren } from 'react'
똑같은 방법으로 리액트에서 지원되는게 있네욤