Closed5

ft_transendenceメイン非公開記事: React v.17とv.18の差異

U (ユウ)U (ユウ)

Chapter 10 [Reactとにかく書き始める: 実践編2💻]

Propsのchildrenプロパティーを使う

childrenとは

  • ただし、TypeScriptでは、propsの型をinterfaceとして定義する必要があるので、childrenもそのままでは使えない
  • 関数の型宣言を使って、Reactの関数コンポーネントであるということを明確化することで、childrenや他の既存のプロパティを使うことができるようになる

これはReact v.17の機能だったため、React v.18では使えなかった (参照>>>)
https://twitter.com/reactjs/status/1512453230504124420?lang=en

関数の型の宣言を使う (function type declaration)

https://typescriptbook.jp/reference/functions/function-type-declaration

TODO:
Reactの関数コンポーネントということを明示することで、Reactのコンポーネントのプロパティを使えるようにする

U (ユウ)U (ユウ)

関数宣言(function文)をアロー関数に書き換える

https://github.com/mfunyu/pre-transcendence/commit/59769f3e5558de43edddb19f1be8ea28bf5656b7

  • 関数の型宣言は関数宣言(function文) の型注釈には使えない 参考>>>
  • 関数の型宣言は、アロー関数または関数式(function式) の型注釈にのみ使うことができるので、アロー関数に書き換える
components/StyledMessage.tsx
-function StyledMessage(props: MessageProps) {
+const StyledMessage = (props: MessageProps) => {
	...
-}
+};
U (ユウ)U (ユウ)

型注釈を加える

https://github.com/mfunyu/pre-transcendence/commits/main#:~:text=add%3A type annotation as React function component

  • React.FC<propsのインターフェース名>と型注釈を加えることで、関数がReactのコンポーネントとして認識され、childrenなどのプロパティーを有効化できる
  • React.FC<propsのインターフェース名>React.FunctionComponent<propsのインターフェース名>の省略形である(どちらを使用しても同じ)
components/StyledMessage.tsx
-const StyledMessage = (props: MessageProps) => {
+const StyledMessage: React.FC<MessageProps> = (props) => {
このスクラップは2022/12/12にクローズされました