Bear29ers / complete-react

Ultimate React Complete Course

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

目次

React の基礎

JSX

React による JavaScript の構文を拡張したもの。
JSX は JavaScript のオブジェクトに変換される。

JSX



JSX がオブジェクトに変換される過程

JSXがオブジェクトに変換される過程



React 要素のレンダー

ReactDOM が仮想 DOM を元に DOM を更新する。

React要素のレンダー



コンポーネントの定義

コンポーネントは JavaScript の関数として定義する。

コンポーネントの定義

関数で定義されるコンポーネントは関数コンポーネントと呼ばれる。

関数コンポーネント

関数コンポーネントはprops を受け取り、JSX を返す

・再利用性の向上(コードが使いまわせる)
・可読性の向上(コードが整理される)
・疎結合になる(バグを減らせる)

コンポーネントの親子関係

コンポーネントは出力する JSX の中に他のコンポーネントを含めることができる。

コンポーネントの親子関係



コンポーネント間のデータのやりとり

コンポーネントは props を親から子に渡すことでデータを受け渡す。
props を通して JavaScript のあらゆる値を渡すことができる。

コンポーネント間のデータのやりとり

props の流れは一方通行
props を子から親に渡すことはできない。

props は読み取り専用
コンポーネント内で props の値を変更してはいけない。

React 要素とコンポーネント

React要素とコンポーネント



コンポーネントツリー

コンポーネントツリー



イベントリスナーと状態管理(State)

画面が変更されるために必要な処理

・React にコンポーネントの再実行(再レンダリング)を依頼し、新しい React 要素を作成してもらう必要がある。
・変更した値をどこかに保持しておく必要がある。(stateに保存)

これらを可能にする仕組みを提供するのがuseState関数

画面が変更されるために必要な処理



useState の役割と使い方

① 接続(Hook into)
React 内部と接続。状態が管理されるようになる。

② "現在の値"と"更新関数"を返却する。

③ 更新関数で新しい値を React に渡す。また、React に自身のコンポーネントを再実行するように依頼する。

useStateの役割と使い方

React 内部に保持されたコンポーネントに紐づく値をstateと呼ぶ。

useState を使う際の注意点

  • コンポーネントの中で呼び出す。
  • if文やfor文の中で呼び出さない。
  • 値の更新と再レンダリングは予約(非同期)される。
  • 前回のstate値を使用する場合は、更新用関数に関数を渡す。
  • オブジェクト型のstateを更新する再は新しいオブジェクトを作成する。
  • stateの値はコンポーネントごとに独立して管理される。
  • 一度消滅したコンポーネントのstateの値はリセットされる。
  • stateをpropsとして渡すことで子コンポーネントで利用できる
  • コンポーネントの位置によってstateが維持される。


state 更新用関数とレンダリング

state更新用関数とレンダリング



state はコンポーネント毎に状態(値)を保持

コンポーネントに紐づく値はそれぞれ独立している。

React 要素のツリー内の位置によっってどのコンポーネントの state か識別している。

stateはコンポーネント毎に状態(値)を保持している



React 要素のツリー構造が変わらない場合

コンポーネントのReact 要素ツリーにおける位置が変わらない場合は state は保持される

React要素のツリー構造が変わらない場合



同じ位置に独立してコンポーネントを表示

key を付けることによって同じ位置の同じコンポーネントでも別物と認識させることができる。

同じ位置に独立してコンポーネントを表示



制御構文とフォームの制御

リストには必ずキーを設定する

前提知識

React は React 要素ツリー(厳密には Fiber ツリー)の差分検出処理をして DOM を更新している

前提知識



最後に要素を挿入した場合

差分検出は子の React 要素に対して先頭から順に比較し、差分処理を行う

最後に要素を挿入した場合



先頭に要素を挿入した場合(key なし)

最後に要素を挿入した場合

React は全ての子の React 要素を変更してしまい、全ての Real DOM を洗替える(子要素を全て削除して、新しい子要素を追加する)。

先頭に要素を挿入した場合(key あり)

最後に要素を挿入した場合

子要素に key を持たせると、React はどの要素が変更、追加、削除されたかを識別できるようになるため、差分のみ更新することが可能になる。

keyを付ける際の注意点

  • キーには必ず一意の値を設定する。
  • キーに設定した値は変更しない。
  • 配列のインデックスはなるべく使わない。


React でのスタイル適用方法

CSSファイルの読み込み

import "./Example.css";

CSS ファイルに class を定義して、JSX の className に適用する

特徴
  • グローバルスコープとなるため、クラス名の衝突が起きやすい
  • ルートファイル(`App.js`等)でグローバルなスタイルを当てたいときに使用する


インラインスタイル

style={{ color: 'red' }}

JSX の style 属性にオブジェクトを渡す

特徴
  • 再利用性が低い
  • 擬似要素やメディアクエリが使用できない
  • レンダリングの度に計算されるので、パフォーマンスが劣る
  • 動的で頻繁に計算されるスタイルの適用


CSS Modules

import styles from "./Example.module.css";

CSS ファイルをモジュールとして JS ファイルに読み込んで、コンポーネントごとにローカルスコープを作ってスタイルを適用する

特徴
  • クラス名の衝突が起きない
  • `create-react-app`で設定済みのため、すぐ使える
  • 将来、非推奨になる可能性がある
  • CSSとJSが2つのファイルに分かれる


CSS in JS

const StyledButton = styled.div``;

CSS を JS ファイル内に記載して、CSS を適用したコンポーネントを作成する

特徴
  • クラス名の衝突が起きない
  • ライブラリを導入する必要がある
  • CSSとJSが1つのファイルにまとまる
  • propsを参照して動的にスタイルできる
  • 擬似要素やメディアクエリが使用できる


ReactでDOM操作を行う方法

ポータル

ポータルの子要素を、直接の親要素ではなく別の DOM 要素にマウントすることができる。

ポータル



useRefとは

再レンダリングを発生させず値を保持する方法

const ref = useRef(initialValue);
  • useRefは"refオブジェクト"を返す。
  • currentプロパティに値が設定される。
  • ref.currentで値にアクセスできる。
    値は読み書き可能

useRefとは



refの特徴

  • 再レンダリングされても情報が保存される。
    ※通常の変数はレンダリングの度に初期化される。
  • refの値を変更しても再レンダリングがトリガーされない。
    ※同じく値を保持できるstateは変更されると再レンダリングされる。
  • refオブジェクトをJSXのref属性に渡すとそのDOMにアクセスできるようになる。

最も一般的な利用法



refを使ったDOMの操作

① ref オブジェクトの作成

const inputRef = useRef(null);

② 操作したい DOM に対応する JSX の ref 属性に渡す

<input ref={inputRef}>

③ React は DOM への参照をinputRef.currentに格納する

④ イベントハンドラなどで DOM にアクセスする

inputRef.current.focus();

⑤ イベントハンドラを<button>のクリックイベントなどで発火させる

他のコンポーネントのDOMの操作

React のデフォルトでは、コンポーネントが他のコンポーネントの DOM にアクセスすることはできない

アクセスされる側のコンポーネントがそれを許すかどうかを決めることができる(forwardRef

他のコンポーネントのDOMの操作



useRefの使用上の注意

  • refはレンダリングに使用しない値を保持するための逃げ道であり、頻繁に必要とするものではない。(ReactではDOMは直接操作するものではなく、あくまでReactの機能として変更が加えられるもの
  • レンダリング中はref.currentを参照・変更してはならない(初回レンダリングは除く)。通常はイベントハンドラからアクセスする。
  • DOMを手動で追加・削除する場合は、ReactのDOMの操作と干渉しないように注意する。


useImperativeHandle

forwardRefと共に使用する。親から受け取った ref オブジェクトをカスタマイズすることができる。

useRefとは

子コンポーネント内でuseImperativeHandleに渡したメソッドが、親の ref に登録され、ref.current."メソッド名"で実行できるようになる。

Immutability(不変性)

前提

イミュータブル(immutable)

書き換えが不可(元の値は変わらない)

文字列、数値、BigInt、真偽値、undefined、シンボル

ミュータブル(mutable)

イミュータブルな値以外。オブジェクト(Object、Array など)



イミュータブル(immutable)な値の変更

イミュータブル(immutable)な値の変更

例えば数値のようなイミュータブルな値を変更すると、値自体が変更されるのではなく、新しい別の値に参照が向けられるようになる。

ミュータブル(mutable)な値の変更

変数の参照先が変わらないため、配列の中身が変わっていることになる(オブジェクトも同様)。

ミュータブル(mutable)な値の変更



Immutabilityの保持

コピーをすることで変数の参照先を変え、mutable な配列やオブジェクトを immutable のように扱う。

Immutabilityの保持



関数型プログラミングとImmutabilityの保持

mutable なオブジェクトを immutable として取り扱う。

関数内で使用する場合は必ずオブジェクトをコピーして使用する。

関数型プログラミングとImmutabilityの保持



関数型プログラミング

前提

React は 16.8.0 の React Hooks 導入により、様々な Hooks が使用できるようになった。

それと同じく関数コンポーネントと呼ばれる関数でコンポーネントを定義するようになった。その影響で関数型プログラミングに大きくシフトした。

関数型プログラミングの前提



関数型とオブジェクト指向型

現実ではオブジェクト指向型と関数型が混合して書かれることがよくある。

関数型とオブジェクト指向型



手続き(命令)型プログラミングとは?

ブラウザなどへの命令を手順通り(手続き通り)記述していく手法。

コード量が大きくなってくると可読性が悪くなる。

// 制御フロー
let nums = [1, 2, 3];
let doubleNums = [];
for (let i = 0; i < nums.length; i++) {
  let double = nums[i] * 2;
  doubleNums.push(double);
}


関数型プログラミングとは?

手続き型の制御を(なるべく)関数に分離(隠蔽) し、やりたいことに集中できるようにするプログラミング手法。

let nums = [1, 2, 3];
let doubleNums = nums.map((num) => num * 2);

ループ制御:map メソッドが担当
やりたいこと:関数で定義(開発者が担当)

関数型と手続き型は混在する

関数の利用者(関数型プログラミング)

let nums = [1, 2, 3];
let doubleNums = nums.map((num) => num * 2);

map メソッドはブラウザのビルトインメソッドだが、実際に 0 から記述すると手続き型の書き方になる。

ループ処理は分離(中身は手続き型プログラミング)

for (let i = 0; i < nums.length; i++) {
  let double = nums[i] * 2;
  doubleNums.push(double);
}


関数型プログラミングの重要なキーワード

  • (値の)状態管理と処理を分岐
    • 状態と処理は切り離す
  • 純粋関数(副作用を排除する)
    • 特定の入力には特定の出力を返す
  • 不変性(Immutability)
    • 一度設定した値は書き換えない


関数型プログラミングのメリット(目標)

  • コードの可読性の向上
  • 拡張性・再利用性の向上
  • テスト性の向上
  • モジュール化の向上
  • Tree Shakingの向上


useContextでstate管理

propsバケツリレー

propsバケツリレー

コンポーネントは親から子へ props を渡す。コンポーネントを跨いだり、兄弟コンポーネントに渡すことはできない。

コンポーネント間のデータの共有

コンポーネント間のデータの共有

propsstate更新関数をを間にある全てのコンポーネントでリレーして共有する。

↑ この書き方だと冗長になってしまうため、アプリケーション全体で共有して使用する state に関しては、useContextでラップする。

useEffectの実行タイミング

useEffect(依存配列が空のとき)

コンポーネントの状態

  • Mounted:コンポーネントが生成されたとき
  • Updated:何らかのstateが更新されたとき
  • Unmounted:コンポーネントが消滅したとき

useEffect(依存配列が空のとき)



useEffect(依存配列あり、更新あり)

state 更新のタイミングで、依存値が更新されたかどうかを判断し、更新されていればcleanUp()callback()の処理が実行される。

useEffect(依存配列あり、更新あり)



useEffect(依存配列省略)

依存値が設定されていないので、再レンダリングが実行される度にcleanUp()callback()が呼ばれる。

useEffect(依存配列省略)



カスタムフック

useState などの React Hooks を内部で使用した関数(フック)のこと。

※ 関数名はuse◯◯とする。

React Hooks を関数に切り出すことで再利用できる。

useEffect(依存配列省略)



useEffectと副作用

純粋関数と副作用(Side Effect)

純粋関数

  • 関数の出力(戻り値)が、提供される入力値(引数)のみに依存する。
  • 外部スコープの状態(データ)は参照・変更しない。
  • 引数で渡された値を変更しない。
  • 関数外に影響を及ぼさない。

→ 上記の要件を満たさない操作は副作用と呼ばれる。

Reactにおける副作用(Side Effect)

コンポーネントは JSX を構築する場所。JSX の構築に"直接"関係のない処理は全て副作用として扱われる。

副作用の例

  • コンソールへのログ出力
  • DOM操作
  • サーバーとの通信
  • タイマー処理
  • ランダムな値の生成

useEffect or イベントハンドラ内に記述

Redux

Reduxとは

React とは別の状態管理のライブラリ

React 以外のライブラリとも組み合わせて使用可能(React で使用する場合はreact-reduxというライブラリが必要)

Reduxとは



Redux Toolkit(RTK)

素の Redux は他のライブラリが必要なケースが多い。

公式が推奨する設定や書き方をまとめたもの。

様々な便利なライブラリが同梱されている。

Redux Toolkit(RTK)

  • Redux
  • Immer
  • redux-thunk
  • createSlice...


ステート(状態管理)

グローバルステート
アプリ全体で共有されるステート

例)useContextRedux

ローカルステート
特定のコンポーネント内でのみ使用されるステート

ステート(状態管理)



ContextとuseContext

ContextとuseContext



Reduxによる状態管理

Redux を使用する場合でもルートコンポーネントは Provider で囲う必要がある。

Reduxによる状態管理



Reduxのデータフロー

Reduxのデータフロー



ReduxのReducerには副作用は書かない

Reducer は純粋関数として定義する。
副作用が発生する操作は Reducer には書かない。

副作用の例

  • コンソールへのログ出力
  • DOM操作
  • サーバーとの通信
  • タイマー処理
  • ランダムな値の生成

ミドルウェア(middleware)に記載

Redux Thunkとミドルウェア

Redux Thunkとミドルウェア



クラスコンポーネント

Reactのコンポーネント

コンポーネントの定義方法は大きく分けて 2 つある。

  • 関数コンポーネント
    • JSの関数として定義。ここまで登場したものは全て関数コンポーネント
  • クラスコンポーネント
    • JS(ES6)のクラスとして定義するコンポーネント


コンポーネントの定義方法の変化

React16.8 より追加された Hooks という新機能(2019 年)の登場によってコンポーネントの定義方法が大きく変わった。

登場前 クラスコンポーネントがメイン

登場後 関数コンポーネント + Hooks(公式に推奨されている)

Hooksの登場"前"のReact

  • 状態の管理やライフサイクルを利用するにはクラスコンポーネントを使用する必要があった。
  • 関数コンポーネントは存在したが、stateを管理できず、データを受け取って表示するだけなどの単純なコンポーネントにしか使えなかった。

Hooks 登場前はクラスコンポーネントがメイン

なぜクラスコンポーネントを学ぶのか?

  • クラスコンポーネントが多用されている過去のプロジェクトに参加している、将来する可能性がある
  • 既存のシステムの改修に携わる可能性がある
  • クラスコンポーネントにしか対応していないライブラリを使用したい
  • Reactの理解を深めたい


クラスコンポーネントの問題点

問題点1
共通のステートフルなロジックの再利用が難しい

高階コンポーネントやレンダープロップという設計パターンで、共通のロジックを分離して、ビュー(見た目)を担当するコンポーネントと合成することで関心を分離する。

分離のたびにコンポーネントの再構成が必要であり、面倒な上にコードが追いにくくなる。

問題点2
ステートの管理が複雑なコンポーネントは保守性が低い

コンポーネントが複雑になると、ステートフルなロジックや副作用に関するロジックがコンポーネント内のいたる場所に存在してしまい、分散してしまう。

コンポーネントが複雑化し、分割も困難になる。
無理に分割しようとすると、問題点 1 が発生する。

問題点3
JS の Class 構文は混乱を招き、関数に比べて可読性も低い。

JavaScript の Class 構文のthisbindなどの独特な構文を理解してい意識する必要がある。

コードの可読性が下がり、冗長になる。

クラスコンポーネントの問題点まとめ

  1. ステートフルな共通のロジックの再利用が難しい
  2. ステートの管理が複雑になると保守性が下がる
  3. そもそもJSのクラスが混乱を招きやすく可読性が低い

これらの問題を解決するため、Hooks が導入された。

コンポーネントのライスサイクルとは?

コンポーネントの一生には 3 つの段階がある。

  1. Mounting
  2. Updating
  3. Unmounting

それぞれの段階で特別なメソッドが用意されており、特定のタイミングで実行させることができる。

主なライフサイクルメソッド

Mounting
componentDidMount(): 1 回目のrender()が呼ばれ、DOM がレンダーされた後に 1 度だけ実行される。

Updating
componentDidUpdate(): state が更新された直後に実行される。

Unmounting
componentWillUnmount(): コンポーネントが破棄される直前に実行される。

Class コンポーネントのライフサイクル

ライフサイクルメソッドとuseEffectの比較

クラスコンポーネント 関数コンポーネント
componentDidMount() useEffect(..., [])
componentDidUpdate() useEffect(..., [val])
componentWillUnmount() useEffect(() => { return () => {...}}, [])


レンダリングの最適化

Reactが画面を更新する流れ

トリガー: 何らかの契機にレンダリングを予約すること

レンダリング: コンポーネントを実行すること

コミット: DOM への更新を行うこと

レンダリングがトリガーされるタイミング

  1. 初回レンダリング
    ルートコンポーネントを HTML(DOM)にマウントしたとき

<div id="app"></div>root.render(<App />);

  1. "state"の値が更新されたとき
    コンポーネントの state の値が変更されたとき
    ※ 基本的には state の前後の値に差が生じた際にレンダリングがスケジュールされる

stateの比較

"更新用関数で渡された値"と"保持している値"を比較

stateの比較



値が異なることをもう少し具体的にすると、Object.is(①, ②)の結果が同じかどうかになる。

state の変更前後で値が同じ時も再レンダリングが発生することはある

現在値と同じ値で更新を行った場合、React は子のレンダーや副作用の事項を回避して処理を終了します

更新の回避が起きる前に React により該当のコンポーネント自体はレンダーされるかもしれない、ということに注意してください。 ツリーのそれ以上「深く」にまで処理は及ばないためこれは問題ではないはずです。もしレンダー中にコストの高い計算を行っている場合は useMemo を使った最適化が可能です。

React 公式(state 更新の回避)

レンダリング

React が(関数)コンポーネントを実行すること

state の変更によってコンポーネントが再実行されることを再レンダリングと呼ぶ。

レンダリング



コミット

再レンダリングの結果、React が React 要素の差分のみを DOM に反映する

コミット



パフォーマンスの最適化

再レンダリングを防ぐための関数

再レンダリングを防ぐための関数



React.memo

受け取った props の値が同じであれば再レンダリングをスキップ

React.memo



関数がpropsに渡る場合

コンポーネント内で定義した関数は再レンダリングのたびに再生成される。

関数がpropsに渡る場合



useCallback

コンポーネント内で定義した**"関数"**をメモして再利用し、レンダリングの度に生成されることを防ぐ

子コンポーネントに関数を渡している場合に、不要な再レンダリングを防ぐことができる。

useMemo

コンポーネントだけでなく値をメモすることが可能。コストの高い処理などをメモ化する。

useMemo 自体の実行にもコストがかかるため、思い処理にのみ使用すること。

Rest APIを使ったサーバーとの通信

サーバーとブラウザの関係

サーバーとブラウザの関係



Rest APIとは?

以下の特徴を持つ、サーバーへのリクエスト方式のこと

  • リソースごとにURLを定義
  • メソッドでリソースに対する処理を定義
    • メソッドの例)POST、GET、DELETE、PUTなど
  • JSONでデータをやりとりする

Rest API



通常のリクエスト

処理ごとに URL のパスを設ける

通常のリクエスト



Rest API

リソースごとに URL のパスを設ける

Rest API



Next.js

Next.jsとは

React 開発のためのフレームワーク

高速な Web アプリケーションを作成するための様々な機能を提供

Next.jsとは



Reactとの違い

  • React
    • UIを構築するための機能を提供するライブラリ
  • Next.js
    • React開発のための機能を提供するフレームワーク


Next.jsのメリット

ゼロコンフィグで高度な機能を使用可能。

手動で複雑な設定をする必要なく、効率的に開発を進めることができる。

Next.jsの主な機能

  • 複数のレンダリング方法(SSR、SG、ISG)
  • ファイルベースルーティング(ダイナミックルート)
  • APIの作成(API Routes)
  • デベロッパーに優しい開発環境(ゼロコンフィグ)


プロジェクト構成

  • /pages
    • ファイルまでのパスがそのままページになる
  • /styles
    • グローバルに適用されるスタイルを配置
  • /pages/_app.js
    • ページ遷移時に必ず呼ばれる処理を記述
  • next.config.js
    • Next.jsの設定を記載


ファイルベースルーティング

  • pages配下からexportされたコンポーネントを1ページとしてルーティングする。
  • [id]は動的なパスとして認識される。
  • getServerSideProps、queryでダイナミックルートを取得する


ページ遷移

useRouter
ページ遷移を行うための値やメソッドを取得する際に利用

<Link href>
href に遷移先の URL を設定する

その他

<Head>
<head>タグ内に挿入したいタグを記載する

<Script>
外部スクリプトを読み込む際に使用

Next.jsにおけるレンダリング

複数のレンダリング方法の選択

  • CSR - クライアントサイドレンダリング
  • SSR - サーバーサイドレンダリング
  • SG - 静的サイト生成
  • ISR - インクリメンタル静的再生成


CSR - クライアントサイドレンダリング

・データフェッチやルーティングの全てがクライアント上で行われる

→ これまで行ってきた React 開発は CSR に分類される

※ Next.js の開発ではクライアント側でのみ行いたい処理はuseEffectで囲む

CSR - クライアントサイドレンダリング



  • メリット
    • 静的なファイルの配置のみで動く
    • Node.jsの実行は必要ないため、サーバーの負荷が軽い
  • デメリット
    • 初期描画までに時間がかかる
    • クローラーによってはSEO的な問題あり


SSR - サーバーサイドレンダリング

  • Node.js(サーバー)にリクエストが来たタイミングで動的にHTMLを生成
  • 外部APIへのデータの取得やコンポーネントのpropsの値を決定する処理を行い、HTMLを作成してクライアント側に返却する

SSR - サーバーサイドレンダリング



  • メリット
    • 生成済みのHTMLを取得するのでSEOに強い
  • デメリット
    • 生成処理を全てサーバー側でするので負担大
    • HTMLをクライアントに渡すまで時間がかかる


SG - 静的サイト生成

  • ビルド時にデータフェッチやpropsの値の決定を行い、HTMLを構築する
  • クライアントからリクエストされると、サーバー側で構築することなく、生成済みのHTMLを渡す

SG - 静的サイト生成



  • メリット
    • 構築済みページのため表示速度が早い
    • SEOも問題なし
  • デメリット
    • 更新頻度が高い動的コンテンツとの相性が悪い

Next.jsの基本構成

基本的なページは

SG - 静的サイト生成

動的に作成する必要があるページは

SSR - サーバーサイドレンダリング

を用いる

ISR - インクリメンタル静的再作成

  • ビルド時にHTMLを構築
  • 一定時間後にアクセスがあった場合、生成済みのHTMLを返しつつ、サーバー側でHTMLを更新
  • 次のアクセス時に最新のHTMLを返す

ISR - インクリメンタル静的再作成



  • メリット
    • SGを利用しながら動的なコンテンツも更新できる
  • デメリット
    • サーバーの設定が少し手間
    • 基本はNext.jsの開発元のVercelを使う


テスト

テストの種類

単体テスト

関数、コンポーネント単位で行うテスト(Jest@testing-library、mocha、chai など)

結合テスト(e2e テスト)

機能を結合し、アプリ全体に対して行うテスト(Selenium、Cypress、Puppeteer など)

※一気通貫テスト

関連システムを含め、エコシステム全体に対して行うテスト

@testing-library

様々なテストライブラリを含むパッケージ

パッケージ名 用途
@testing-library/react React のコンポーネントのレンダリングなどに使用
@testing-library/dom DOM のテストに使用
@testing-library/jest-dom Jest の DOM テストで使用
@testing-library/user-event UI イベントの実行に使用


Jest

複雑な設定が必要ないテストフレームワーク

  • 初期設定不要
  • テスト用関数(test、expect、toBeなど)が利用可能
  • 非同期処理のテスト
  • 外部のAPIのmock化

などが簡単に行える。

TypeScript

TypeScriptとは

JavaScript を拡張したスーパーセットプログラミング言語。

React、Vue、Angular、Svelte などと合わせて使用することができる。

TypeScriptの特徴

  1. JavaScriptに変換してから実行。
  2. 型の定義が可能。
  3. JavaScriptにない記述が使用可能。


TypeScriptのメリット・デメリット

メリット

  • 型定義によるチーム開発の円滑化
  • 公開用ライブラリへの型定義
  • バグの事前検知
  • VSCodeの自動補完

デメリット

  • 型の記述が面倒
  • JavaScript特有の柔軟で簡易な記述の喪失

About

Ultimate React Complete Course


Languages

Language:JavaScript 97.0%Language:HTML 1.3%Language:CSS 1.2%Language:TypeScript 0.6%Language:Dockerfile 0.0%