1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Reactの型定義

Posted at

Reactの基礎とTypeScriptの基礎をある程度学んだが、Reactのどのような場面でTypeScriptを使うのかがいまいちよくわからないので、そこら辺を理解するために書き殴ります。

##React.VFC
ファンクションコンポーネントを定義するための型。以下のように記述する

const App: React.VFC = () => {
  return(
    <div></div>
  )
}

export default App;

「この関数はReactのファンクションコンポーネントですよ」
みたいな意味。

##propsの型定義

propsの型定義は、React.VFCの型にジェネリクスを指定する形で定義する。

//propsの型
type Props = {
  text: string
}

export const Child: React.VFC<Props> = (props) => {
  return(
    <div>{props.text}</div>
  )
}
//親のファイル

import { Child } from "./Child";

const App: React.VFC = () => {
  return (
    <div>
      <Child text="子供に渡すテキスト"/>
    </div>
  );
}

export default App

「この関数はReactのファンクションコンポーネントで、propsとしてstring型の値を受け取りますよ」
みたいな意味。
上の例で言えばComponentのpropsにstring型以外の値を受け取るとエラーが出る。

export const Child: React.VFC<{text: string}> = (props) => {
  return(
    <div>{props.text}</div>
  )
}

そんなに型が多くない時はこんな感じでもかけるらしい。

##useStateの型定義
useStateの型定義はuseStateを宣言する時に型を指定する。
useStateには初期値を入れると型推論が効くので、初期値から方が明確にわかる時は無理にアノテーションをする必要はなく

import { useState } from 'react'

type UserData = {
  id: number;
  name: string;
}

export const StateSample: React.VFC = () => {
  //初期値から型が明確なので型推論に任せる
  const [count, setCount] = useState(0)
  //stateをnullでリセットする必要がある時はnullでもとれるようジェネリクスを用いて型を指定する
  const [count2, setCount2] = useState<number | null>(0);
  /*stateにオブジェクトを持たせる場合は、
  予め型エイリアスなどで型を定義しておき、その型をジェネリクスで指定する
  初期値はその型の構造を満たしておく必要がある*/
  const [user, setUser] = useState<UserData>({ id: 1111, name: "aiko" });
  
  return(
    <div>
      <h1>{count}</h1>
      <h1>{user.name}</h1>
    </div>
  )
}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?