序文この記事では、TS の基本的な概念ではなく、プロジェクトで TypeScript (以下、TS と呼びます) を React と組み合わせて使用することに焦点を当てます。 TS の型チェックには、オンライン TS ツール 👉TypeScript Playground を使用できます。 React要素関連React 要素関連の型には、主に
以下に使用例をいくつか示します。 const MyComp: React.FC<{ title: string; }> = ({title}) => <h2>{title}</h2>; // リアクトノード 定数a: React.ReactNode = ヌル 未定義 || <div>hello</div> || <MyComp title="world" /> || "abc" || 123 || 真実; // ReactElement と JSX.Element const b: React.ReactElement = <div>hello world</div> || <MyComp title="good" />; const c: JSX.Element = <MyComp title="good" /> || <div>hello world</div>; ネイティブDOM関連ネイティブ DOM 関連のタイプには、主に 簡単に言えば、 したがって、関係は React合成イベントReact では、ネイティブ イベントが React イベントに処理され、内部的にメモリが最適化され、イベント委任を通じて DOM イベント バインディングが削減されます。話を元に戻すと、React イベントの一般的な形式は [xxx]Event で、一般的なものは 次に例を示します。 // 入力ボックスにテキストを入力します const handleInputChange = (evt: React.ChangeEvent<HTMLInputElement>) => { コンソールログ(evt); }; // ボタンクリック const handleButtonClick = (evt: React.MouseEvent<HTMLButtonElement>) => { コンソールログ(evt); }; // モバイル端末タッチ div 定数 handleDivTouch = (イベント: React.TouchEvent<HTMLDivElement>) => { コンソールログ(evt); }; フックとの組み合わせフックの中には、TS と強く関連しているものばかりではありません。たとえば、useEffect は型定義に TS に依存しません。TS と強く関連している一般的なフックをいくつか見てみましょう。 使用状態初期値で型を記述できる場合は、useState に汎用変数を指定する必要はありません。 // ❌初期値 0 はすでにカウント型を記述しているので、これは不要です。const [count, setCount] = useState<number>(0); // ✅これはより良いです const [count, setCount] = useState(0); 初期値が null または undefined の場合、ジェネリックを通じて予想される型を手動で渡し、プロパティにアクセスするときにオプションのチェーンを通じて構文エラーを回避する必要があります。 インターフェースIUser{ 名前: 文字列; 年齢: 番号; } const [user, setUser] = React.useState<IUser | null>(null); console.log(ユーザー名?.名前); 参照を使うこのフックは非常に特殊で、通常は 2 つの用途があります。 DOM に接続して DOM 要素を取得するために使用されます。 // DOMに接続します。初期値はundefinedではなくnullです。汎用変数を指定する場合は、HTMLxxxElementを指定する必要があります。 // 呼び出し時に inputRef.current に値が必要であることが確実な場合は、null 以外のアサーションを使用して null の後に追加できます。 const inputRef = useRef<HTMLInputElement>(null!); const ハンドルクリック = () => { inputRef.current.focus(); // もちろん、非 null アサーションは必要ありません。inputEl.current?.focus() オプション チェーンを使用することもできます。} 戻る ( <入力ref={inputRef} /> <button onClick={handleClick}>クリック</button> ) 2. 変数を格納するために使用されます。関数コンポーネントの外部に格納されるため、useState と比較すると、非同期更新の問題や、 // 初期値を通じてジェネリック変数の型を自動的に指定します const sum = useRef(0); // .current を通じて sum.current = 3 を直接割り当てます。 // 非同期更新の問題はありません console.log(sum.current); // 3 セレクタの使用useSelector はストア内の状態を取得するために使用されます。最初の固定パラメータは関数であり、関数の入力パラメータはストアです。ストアの型 RootState は、事前にストア内で定義する必要があります。一般的な定義は次のとおりです。 store.ts 内: ルートリデューサーをストアに追加します。 エクスポート型 RootState = ReturnType<typeof rootReducer>; 使用する場合: const { var1, var2 } = useSelector((store: RootState) => store.xxx); カスタムフックuseState と同じ方法で配列を返す必要がある場合は、戻り値の最後に as const を使用して定数としてマークする必要があります。そうしないと、戻り値は共用体型であると推測されます。 定数useInfo = () => { 定数[年齢、年齢の設定] = useState(0); return [age, setAge] as const; // 型はタプル、[number, React.Dispatch<React.SetStateAction<number>>] }; redux関連アクションの定義には、公式に公開されている AnyAction を使用し、アクション内のキーと値のペアの制限を次のように緩和することができます。 「redux」からAnyActionをインポートします。 定数DEF_STATE = { カウント: 0, タイプ: '整数' }; // 制限を緩和するためにreduxのAnyActionを使用する function countReducer(state = DEF_STATE, action: AnyAction) { スイッチ(アクションタイプ){ ケース "INCREASE_COUNT": 戻る { ...州、 カウント: 状態.count + 1, }; ケース「DECREASE_COUNT」: 戻る { ...州、 カウント: 状態.count - 1, }; デフォルト: 状態を返します。 } } デフォルトの countReducer をエクスポートします。 規則サブコンポーネントの入力パラメータは、[コンポーネント名] Props という名前が付けられます。例: // たとえば、現在のコンポーネント名はInfoCardです エクスポートインターフェースInfoCardProps { 名前: 文字列; 年齢: 番号; } インターフェースタイプは大文字で始まります。 バックエンド インターフェイスの入力および出力パラメータのインターフェイスを記述し、jsdoc スタイルを使用して、次のようなエディターのプロンプトに便利なコメントを作成します。 エクスポートインターフェース GetUserInfoReqParams { /** 名前*/ 名前: 文字列; /** 年*/ 年齢: 番号; /** 性別*/ 性別: 文字列; } 他のキー名または値をどうすればよいか分からないですか? // キー名が不明で、キー値が数値型に制限されていることを示します export interface NotSureAboutKey { [キー: 文字列]: 数値; } // キー名と値が不明な場合は、次のインターフェースが任意のオブジェクトに適用されます。エクスポートインターフェースAllNotSure { [キー: 文字列]: 任意; } インターフェースでジェネリック変数を使用するにはどうすればいいですか?いわゆるジェネリックは事前定義された型です。その目的は、型定義におけるローカルな柔軟性を実現し、再利用性を向上させることです。通常、インターフェースではジェネリックを使用します。たとえば、次のようになります。 // 通常、インターフェースのジェネリック変数にはデフォルトの型を指定します。interface IHuman<T = unknown> { 名前: 文字列; 年齢: 番号; 性別: T; } // 他の場所で使用する場合 const youngMan: IHuman<string> = { 名前: 'zhangsan'、 年齢: 18歳 性別: '男性' } React プロジェクトでの TypeScript の使用に関するこの記事はこれで終了です。React での TypeScript の使用の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: 仮想マシンのLinux初心者がIPを設定し、ネットワークを再起動する
Nginx は同じドメイン名で構成されており、http と https の両方でアクセスできます。証...
今日は、サイトの設定やウェブサイトのアップロードなど、FlashFXP の最も基本的な機能を紹介しま...
最初にサーバー上に FTP サーバーをセットアップし始めたとき、接続できないことがわかったので、Fi...
下の図は、当社のウェブサイト統計システムの訪問者詳細におけるブラウザ閲覧率を示しており、IE6 が ...
目次序文:ウォーターフォールレイアウトとは何ですか?達成方法: 1. 画像を取得する2. 画像の帯域...
目次1. コード分析2. ソースコードソースコード1. コード分析1.1 HTMLコード分析 <...
イメージは、GitHub と同様に Docker パブリック リポジトリに直接簡単にプッシュできます...
ffmpeg は非常に強力なオーディオおよびビデオ処理ツールです。公式 Web サイトは http:...
まず、VMware Workstation 15.1 バージョンをダウンロードします。Thunder...
アイデアそれは実はとても簡単ですシェル スクリプトを記述して、mysql の mysqldump を...
Oracle、DB2、SQL Server などの他の大規模データベースと比較すると、MySQL に...
Navicat を使用して IP 経由で直接接続すると、次のようなさまざまなエラーが報告されます: ...
最近、MySQL の起動中にエラーが発生しました。エラー メッセージは次のとおりです。 エラー 20...
目次解決策1: レプリカを再構築する前提条件アドバンテージ欠点手順マスター奴隷解決策2: データ修復...
nginx (エンジン x) は、高性能な HTTP およびリバース プロキシ サーバー、メール プ...