キーワード検索50の記事がヒットしました。

鳥に生まれることができなかった人へ

復習のReact

基本的にJavaScriptで書くが、必要があればTypeScript版のコードを掲載する。

React18を対象にする

Next.jsなどのフレームワークは扱わない

Viteで環境構築する

コンポーネント

propsとstateはコンポーネントで値(状態 ≒ state)を扱う。propsは引数、stateはコンポーネントのローカル変数。

propsにはいろんな型の値を渡せる(プリミティブ & オブジェクト)。

const Child = (props) => {
  console.log(props)

  return (
    <>
      <p>id: {props.obj.id}</p>
      <p>name: {props.obj.name}</p>
    </>
  )
}

const App = () => {
  return (
    <Child obj={{ id: 1, name: "kento" }} />
  )
}

分割代入で受け取る。

const Child = ({ obj: { id, name }}) => {
  return (
    <>
      <p>id: {id}</p>
      <p>name: {name}</p>
    </>
  )
}

const App = () => {
  return (
    <Child obj={{ id: 1, name: "kento" }} />
  )
}

TypeScriptでの型定義。

const Child = ({ obj: { id, name }}: { obj: { id: number, name: string }}) => {
  return (
    <>
      <p>id: {id}</p>
      <p>name: {name}</p>
    </>
  )
}

useState

const App = () => {
  const [count, setCount] = useState(0)

  return (
    <>
      <p>count: {count}</p>
      <button onClick={() => setCount(count + 1)}>+1</button>
    </>
  )
}
type Book = {
  id: number,
  name: string
}

const books = [
  { id: 1, name: "kento" },
  { id: 2, name: "kouta" },
  { id: 3, name: "nao" },
  { id: 4, name: "miku" },
]

const Books = ({ books }: { books: Book[] }) => {
  return (
    <>
      {books.map(({id, name}) => (
        <Book id={id} name={name} key={id} />
      ))}
    </>
  )
}

const Book = ({ id, name }: Book) => {
  return (
    <>
      <p>id: {id}, name: {name}</p>
    </>
  )
}

const App = () => {
  return (
    <Books books={books} />
  )
}

コンポーネントが再レンダリングされるタイミング(詳しく書く)

  • stateが変化した時
  • propsが変化した時
  • 親コンポーネントが再レンダリングされた時

key属性

children

ReactNodeで型定義?

参考 : Reactのchildrenの型で子コンポーネントを制御する(したかった)

自動バッチング

複数のステート更新を一回にまとめる機能。

参考

>Vueユーザー「あれ、ReactでonClickが動かない。。」のワケ - Qiita

自動バッチング

新機能:自動バッチング React 18の新機能Automatic Batchingを理解する|デザミス株式会社 U-motion 開発チーム