著者は、Write for DOnationsプログラムの一部として寄付を受け取るためにTech Education Fundを選択しました。
前書き
TypeScriptは、JavaScript開発者がアプリ、特にWebアプリケーションのコードを構造化および作成する方法に多くの改善をもたらしました。 JavaScriptのスーパーセットとして定義されているTypeScriptは、JavaScriptと同じように動作しますが、開発者がバグの少ないまたはまったくないより大きく複雑なプログラムを構築できるように設計された追加機能を備えています。 TypeScriptの人気はますます高まっています。 Angular WebフレームワークのためにGoogleのような主要企業に採用されました。 Nest.jsバックエンドフレームワークもTypeScriptで構築されました。
開発者として生産性を向上させる方法の1つは、本番環境で既存のアプリを壊す心配をせずに、できるだけ早く新機能を実装できることです。 これを実現するために、静的に型指定されたコードを記述することは、多くのベテラン開発者が採用しているスタイルです。 TypeScriptのような静的に型付けされたプログラミング言語は、すべての変数とデータ型との関連付けを強制します。文字列、整数、ブール値など。 静的に型付けされたプログラミング言語を使用する主な利点の1つは、型チェックがコンパイル時に完了するため、開発者が非常に早い段階でコードのエラーを確認できることです。
ReactはオープンソースのJavaScriptライブラリであり、開発者はこれを使用して、スケーラブルなWebアプリケーション用のハイエンドユーザーインターフェイスを作成します。 単一ページアプリケーション向けにReactで構築された優れたパフォーマンスと動的なユーザーインターフェイスにより、開発者の間で人気があります。
このチュートリアルでは、別個のREST APIバックエンドと、ReactおよびTypeScriptで構築されたフロントエンドを備えた顧客リスト管理アプリケーションを作成します。 json-server
という名前の偽のRESTAPIを使用してバックエンドを構築します。 これを使用して、CRUD(作成、読み取り、更新、削除)バックエンドをすばやくセットアップします。 したがって、ReactとTypeScriptを使用して、アプリケーションのフロントエンドロジックの処理に集中できます。
前提条件
このチュートリアルを完了するには、次のものが必要です。
-
Node.js(少なくともv6)および
npm
(少なくともv5.2)のローカルインストール。 Node.js is a JavaScript run-time environment that allows you to run your code outside of the browser.npm
と呼ばれるパッケージマネージャーがプリインストールされており、パッケージをインストールおよび更新できます。 これらをmacOSまたはUbuntu18.04にインストールするには、How to Install Node.js and Create a Local Development Environment on macOSの手順またはHow To Install Node.js on Ubuntu 18.04の「PPAを使用したインストール」セクションに従います。 -
ヤーンのローカルインストール。 follow these stepsを使用して、オペレーティングシステムにYarnをインストールします。
-
TypeScriptとJavaScriptの基本的な理解。
-
インストールされているテキストエディタ。 Visual Studio Code、Atom、またはSublime Textなど。
[[step-1 -—- installing-typescript-and-creating-the-react-application]] ==ステップ1—TypeScriptのインストールとReactアプリケーションの作成
このステップでは、ノードパッケージマネージャー(npm
)を使用して、TypeScriptパッケージをマシンにグローバルにインストールします。 その後、Reactとその依存関係もインストールし、開発サーバーを実行してReactアプリが動作していることを確認します。
開始するには、ターミナルを開き、次のコマンドを実行してTypeScriptをインストールします。
npm install -g typescript
インストールプロセスが完了したら、次のコマンドを実行して、TypeScriptのインストールを確認します。
tsc -v
マシンにインストールされている現在のバージョンが表示されます。
OutputVersion 3.4.5
次に、create-react-app
ツールを使用してReactアプリケーションをインストールし、1つのコマンドでアプリケーションをセットアップします。 npm
5.2以降に付属するパッケージランナーツールであるnpx
コマンドを使用します。 create-react-app
ツールには、追加の構成を必要とせずにTypeScriptを操作するためのサポートが組み込まれています。 次のコマンドを実行して、typescript-react-app
という名前の新しいReactアプリケーションを作成してインストールします。
npx create-react-app typescript-react-app --typescript
上記のコマンドは、typescript-react-app
という名前の新しいReactアプリケーションを作成します。 --typescript
フラグは、Reactコンポーネントのデフォルトのファイルタイプを.tsx
に設定します。
このセクションを完了する前に、アプリケーションはポート間を移動する必要があります。 これを行うには、React Routerという名前のReactアプリケーションのルーティングライブラリとそれに対応するTypeScript定義をインストールする必要があります。 yarn
を使用して、このプロジェクトのライブラリとその他のパッケージをインストールします。 これは、特にReactアプリケーションの依存関係をインストールする場合に、yarn
の方が高速であるためです。 新しく作成したプロジェクトフォルダーに移動し、次のコマンドでReact Routerをインストールします。
cd typescript-react-app
yarn add react-router-dom
これで、プロジェクト内でルーティング機能を提供するReact Routerパッケージができました。 次に、次のコマンドを実行して、React RouterのTypeScript定義をインストールします。
yarn add @types/react-router-dom
次に、ブラウザ用のPromisedベースのHTTPクライアントであるaxios
をインストールして、アプリケーション内で作成するさまざまなコンポーネントからHTTPリクエストを実行するプロセスを支援します。
yarn add axios
インストールプロセスが完了したら、次を使用して開発サーバーを起動します。
yarn start
アプリケーションはhttp://localhost:3000
で実行されます。
アプリケーションのあるページから別のページへの移動を支援するために、TypeScriptのインストール、新しいReactアプリケーションの作成、React Routerのインストールが正常に完了しました。 次のセクションでは、アプリケーションのバックエンドサーバーを設定します。
[[step-2 -—- creating-a-json-server]] ==ステップ2—JSONサーバーの作成
このステップでは、Reactアプリケーションがすばやく接続できる模擬サーバーを作成し、そのリソースを使用します。 このバックエンドサービスは、運用環境のアプリケーションには適していないことに注意することが重要です。 Nest.js、Express、またはその他のバックエンドテクノロジーを使用して、実稼働環境でRESTful APIを構築できます。 json-server
は、プロトタイプを作成してバックエンドサーバーをモックする必要がある場合に便利なツールです。
npm
またはyarn
のいずれかを使用して、マシンにjson-server
をインストールできます。 これにより、プロジェクトを使用する必要がある場合に、プロジェクトの任意のディレクトリから使用できるようになります。 新しいターミナルウィンドウを開き、次のコマンドを実行して、プロジェクトディレクトリ内にいる間にjson-server
をインストールします。
yarn global add json-server
次に、REST APIによって公開されるデータを含むJSONファイルを作成します。 このファイル(作成するファイル)で指定されたオブジェクトに対して、CRUDエンドポイントが自動的に生成されます。 まず、server
という名前の新しいフォルダーを作成し、そのフォルダーに移動します。
mkdir server
cd server
ここで、nano
を使用して、db.json
という名前の新しいファイルを作成して開きます。
nano db.json
次のコンテンツをファイルに追加します。
/server/db.json
{
"customers": [
{
"id": 1,
"first_name": "Customer_1",
"last_name": "Customer_11",
"email": "[email protected]",
"phone": "00000000000",
"address": "Customer_1 Address",
"description": "Customer_1 description"
},
{
"id": 2,
"first_name": "Customer_2",
"last_name": "Customer_2",
"email": "[email protected]",
"phone": "00000000000",
"address": "Customer_2 Adress",
"description": "Customer_2 Description"
}
]
}
JSON構造は、2つのデータセットが割り当てられた顧客オブジェクトで構成されます。 各顧客は、id
、description
、first_name
、last_name
、email
、phone
、およびaddress
の7つのプロパティで構成されています。
ファイルを保存して終了します。
デフォルトでは、json-server
はポート3000
で実行されます。これは、Reactアプリケーションが実行されるのと同じポートです。 競合を回避するために、json-server
のデフォルトポートを変更できます。 これを行うには、アプリケーションのルートディレクトリに移動します。
cd ~/typescript-react-app
お好みのテキストエディタでアプリケーションを開き、json-server.json
という名前の新しいファイルを作成します。
nano json-server.json
次に、次を挿入してポート番号を更新します。
/json-server.json
{
"port": 5000
}
これはjson-server
の構成ファイルとして機能し、サーバーが常に指定されたポートで実行されるようにします。
ファイルを保存して終了します。
サーバーを実行するには、次のコマンドを使用します。
json-server --watch server/db.json
これにより、ポート5000
でjson-server
が開始されます。 ブラウザでhttp://localhost:5000/customers
に移動すると、サーバーに顧客リストが表示されます。
json-server
を実行するプロセスを合理化するために、次に示すように、server
という名前の新しいプロパティでscripts
オブジェクトにpackage.json
を更新できます。
/package.json
{
...
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject",
"server": "json-server --watch server/db.json"
},
...
}
ファイルを保存して終了します。
これで、json-server
を開始したいときはいつでも、ターミナルからyarn server
を実行するだけです。
このアプリケーションのバックエンドサーバーとして使用する簡単なREST APIを作成しました。 また、REST APIのデフォルトデータとして使用される顧客JSONオブジェクトも作成しました。 最後に、json-server
を使用するバックエンドサーバーの代替ポートを構成しました。 次に、アプリケーションの再利用可能なコンポーネントを構築します。
[[step-3 -—- creating-reusable-components]] ==ステップ3—再利用可能なコンポーネントの作成
このセクションでは、アプリケーションに必要なReactコンポーネントを作成します。 これには、データベース内の特定の顧客の詳細をそれぞれ作成、表示、編集するコンポーネントが含まれます。 また、アプリケーション用のTypeScriptインターフェイスの一部を構築します。
開始するには、Reactアプリケーションを実行しているターミナルに戻り、CTRL + C
で開発サーバーを停止します。 次に、./src/
フォルダーに移動します。
cd ./src/
次に、その中にcomponents
という名前の新しいフォルダーを作成し、新しいフォルダーに移動します。
mkdir components
cd components
新しく作成したフォルダー内に、customer
フォルダーを作成し、そのフォルダーに移動します。
mkdir customer
cd customer
次に、Create.tsx
およびEdit.tsx
という名前の2つの新しいファイルを作成します。
touch Create.tsx Edit.tsx
これらのファイルは、フォームをレンダリングし、それぞれ顧客の詳細を作成および編集するためのすべてのビジネスロジックを保持するReactの再利用可能なコンポーネントです。
テキストエディタでCreate.tsx
ファイルを開き、次のコードを追加します。
/src/components/customer/Create.tsx
import * as React from 'react';
import axios from 'axios';
import { RouteComponentProps, withRouter } from 'react-router-dom';
export interface IValues {
first_name: string,
last_name: string,
email: string,
phone: string,
address: string,
description: string,
}
export interface IFormState {
[key: string]: any;
values: IValues[];
submitSuccess: boolean;
loading: boolean;
}
ここでは、React
、axios
、およびReactRouterパッケージからのルーティングに必要なその他の必要なコンポーネントをインポートしました。 その後、IValues
とIFormState
という名前の2つの新しいインターフェイスを作成しました。 TypeScript interfacesは、オブジェクトに渡す必要のある特定のタイプの値を定義し、アプリケーション全体で一貫性を保つのに役立ちます。 これにより、プログラムにバグが発生する可能性が低くなります。
次に、React.Component
を拡張するCreate
コンポーネントを作成します。 IFormState
インターフェイスの直後のCreate.tsx
ファイルに次のコードを追加します。
/src/components/customer/Create.tsx
...
class Create extends React.Component {
constructor(props: RouteComponentProps) {
super(props);
this.state = {
first_name: '',
last_name: '',
email: '',
phone: '',
address: '',
description: '',
values: [],
loading: false,
submitSuccess: false,
}
}
}
export default withRouter(Create)
ここで、TypescriptでReactコンポーネントを定義しました。 この場合、Create
クラスコンポーネントはタイプRouteComponentProps
のprops
(「プロパティ」の略)を受け入れ、タイプIFormState
の状態を使用します。 次に、コンストラクター内で、state
オブジェクトを初期化し、顧客のレンダリング値を表すすべての変数を定義しました。
次に、コンストラクターの直後のCreate
クラスコンポーネント内にこれらのメソッドを追加します。 これらのメソッドを使用して、顧客フォームを処理し、入力フィールドのすべての変更を処理します。
/src/components/customer/Create.tsx
...
values: [],
loading: false,
submitSuccess: false,
}
}
private processFormSubmission = (e: React.FormEvent): void => {
e.preventDefault();
this.setState({ loading: true });
const formData = {
first_name: this.state.first_name,
last_name: this.state.last_name,
email: this.state.email,
phone: this.state.phone,
address: this.state.address,
description: this.state.description,
}
this.setState({ submitSuccess: true, values: [...this.state.values, formData], loading: false });
axios.post(`http://localhost:5000/customers`, formData).then(data => [
setTimeout(() => {
this.props.history.push('/');
}, 1500)
]);
}
private handleInputChanges = (e: React.FormEvent) => {
e.preventDefault();
this.setState({
[e.currentTarget.name]: e.currentTarget.value,
})
}
...
export default withRouter(Create)
...
processFormSubmission()
メソッドは、アプリケーションの状態から顧客の詳細を受け取り、axios
を使用してデータベースに投稿します。 handleInputChanges()
はReact.FormEvent
を使用してすべての入力フィールドの値を取得し、this.setState()
を呼び出してアプリケーションの状態を更新します。
次に、handleInputchanges()
メソッドの直後のCreate
クラスコンポーネント内にrender()
メソッドを追加します。 このrender()
メソッドは、アプリケーションで新しい顧客を作成するためのフォームを表示します。
/src/components/customer/Create.tsx
...
public render() {
const { submitSuccess, loading } = this.state;
return (
Create Post
{!submitSuccess && (
Fill the form below to create a new post
)}
{submitSuccess && (
The form was successfully submitted!
)}
)
}
...
ここでは、first_name
、last_name
、email
、phone
、address
、およびdescription
の値を保持する入力フィールドを持つフォームを作成しました。 )顧客の。 各入力フィールドには、キーストロークごとに実行されるメソッドhandleInputChanges()
があり、Reactstate
を入力フィールドから取得した値で更新します。 さらに、アプリケーションの状態に応じて、submitSuccess
という名前のブール変数が、新しい顧客の作成の前後にアプリケーションが表示するメッセージを制御します。
このGitHub repositoryで、このファイルの完全なコードを確認できます。
Create.tsx
を保存して終了します。
アプリケーションのCreate
コンポーネントファイルに適切なロジックを追加したので、次にEdit
コンポーネントファイルのコンテンツを追加します。
customer
フォルダー内のEdit.tsx
ファイルを開き、次のコンテンツを追加してReact
、axios
をインポートし、TypeScriptインターフェイスを定義することから始めます。
/src/components/customer/Edit.tsx
import * as React from 'react';
import { RouteComponentProps, withRouter } from 'react-router-dom';
import axios from 'axios';
export interface IValues {
[key: string]: any;
}
export interface IFormState {
id: number,
customer: any;
values: IValues[];
submitSuccess: boolean;
loading: boolean;
}
Create
コンポーネントと同様に、必要なモジュールをインポートし、それぞれIValues
およびIFormState
インターフェースを作成します。 IValues
インターフェースは、入力フィールドの値のデータ型を定義しますが、IFormState
を使用して、アプリケーションの状態オブジェクトの予想される型を宣言します。
次に、次に示すように、IFormState
インターフェイスブロックの直後にEditCustomer
クラスコンポーネントを作成します。
/src/components/customer/Edit.tsx
...
class EditCustomer extends React.Component, IFormState> {
constructor(props: RouteComponentProps) {
super(props);
this.state = {
id: this.props.match.params.id,
customer: {},
values: [],
loading: false,
submitSuccess: false,
}
}
}
export default withRouter(EditCustomer)
このコンポーネントは、RouteComponentProps<any>
とIFormState
のインターフェースをパラメーターとして受け取ります。 React Routerがパスパラメーターを解析するときはいつでも、データのタイプがnumber
であるか%(( t5)s。 顧客のuniqueId
のパラメータを期待しているので、any
を使用する方が安全です。
コンポーネント内に次のメソッドを追加します。
/src/components/customer/Edit.tsx
...
public componentDidMount(): void {
axios.get(`http://localhost:5000/customers/${this.state.id}`).then(data => {
this.setState({ customer: data.data });
})
}
private processFormSubmission = async (e: React.FormEvent): Promise => {
e.preventDefault();
this.setState({ loading: true });
axios.patch(`http://localhost:5000/customers/${this.state.id}`, this.state.values).then(data => {
this.setState({ submitSuccess: true, loading: false })
setTimeout(() => {
this.props.history.push('/');
}, 1500)
})
}
private setValues = (values: IValues) => {
this.setState({ values: { ...this.state.values, ...values } });
}
private handleInputChanges = (e: React.FormEvent) => {
e.preventDefault();
this.setValues({ [e.currentTarget.id]: e.currentTarget.value })
}
...
}
export default withRouter(EditCustomer)
最初に、componentDidMount()
メソッドを追加します。これは、コンポーネントの作成時に呼び出されるライフサイクルメソッドです。 このメソッドは、routeパラメーターから取得したid
を取得して特定の顧客をパラメーターとして識別し、それを使用してデータベースから詳細を取得し、フォームに入力します。 さらに、フォームの送信を処理するメソッドを追加し、入力フィールドの値に加えられた変更を処理します。
最後に、Edit
コンポーネントにrender()
メソッドを追加します。
/src/components/customer/Edit.tsx
...
public render() {
const { submitSuccess, loading } = this.state;
return (
{this.state.customer &&
< h1 > Customer List Management App
Built with React.js and TypeScript
Edit Customer
{submitSuccess && (
Customer's details has been edited successfully
)}
}
)
}
...
ここでは、特定の顧客の詳細を編集するフォームを作成し、そのフォーム内の入力フィールドに、アプリケーションの状態が取得した顧客の詳細を入力しました。 Create
コンポーネントと同様に、すべての入力フィールドに加えられた変更は、handleInputChanges()
メソッドによって処理されます。
このGitHub repositoryで、このファイルの完全なコードを確認できます。
Edit.tsx
を保存して終了します。
アプリケーション内で作成された顧客の完全なリストを表示するには、./src/components
フォルダー内に新しいコンポーネントを作成し、Home.tsx
という名前を付けます。
cd ./src/components
nano Home.tsx
次のコンテンツを追加します。
/src/components/Home.tsx
import * as React from 'react';
import { Link, RouteComponentProps } from 'react-router-dom';
import axios from 'axios';
interface IState {
customers: any[];
}
export default class Home extends React.Component {
constructor(props: RouteComponentProps) {
super(props);
this.state = { customers: [] }
}
public componentDidMount(): void {
axios.get(`http://localhost:5000/customers`).then(data => {
this.setState({ customers: data.data })
})
}
public deleteCustomer(id: number) {
axios.delete(`http://localhost:5000/customers/${id}`).then(data => {
const index = this.state.customers.findIndex(customer => customer.id === id);
this.state.customers.splice(index, 1);
this.props.history.push('/');
})
}
}
ここでは、React
、axios
、およびその他の必要なコンポーネントをReactRouterからインポートしました。 Home
コンポーネント内に2つの新しいメソッドを作成しました。
-
componentDidMount()
:アプリケーションは、コンポーネントがマウントされた直後にこのメソッドを呼び出します。 ここでの責任は、顧客のリストを取得し、それでホームページを更新することです。 -
deleteCustomer()
:このメソッドは、パラメーターとしてid
を受け入れ、そのid
で識別される顧客の詳細をデータベースから削除します。
次に、render()
メソッドを追加して、Home
コンポーネントの顧客のリストを保持するテーブルを表示します。
/src/components/Home.tsx
...
public render() {
const customers = this.state.customers;
return (
{customers.length === 0 && (
No customer found at the moment
)}
Firstname
Lastname
Email
Phone
Address
Description
Actions
{customers && customers.map(customer =>
{customer.first_name}
{customer.last_name}
{customer.email}
{customer.phone}
{customer.address}
{customer.description}
Edit Customer
)}
)
}
...
このコードブロックでは、アプリケーションの状態から顧客のリストを配列として取得し、それを反復処理して、HTMLテーブル内に表示します。 また、customer.id
パラメータを追加します。このパラメータを使用して、特定の顧客の詳細を識別し、リストから削除します。
Home.tsx
を保存して終了します。
インターフェースを使用してコンポーネントとプロップのタイプを定義することにより、このアプリケーションで作成されたすべてのコンポーネントに対して静的に型付けされた原則を採用しました。 これは、ReactアプリケーションでTypeScriptを使用するための最良のアプローチの1つです。
これで、アプリケーションに必要なすべての再利用可能なコンポーネントの作成が完了しました。 これで、これまでに作成したすべてのコンポーネントへのリンクでアプリコンポーネントを更新できます。
[[step-4 -—- setting-up-routing-and-updating-the-entry-point-of-the-application]] ==ステップ4—ルーティングの設定とアプリケーションのエントリポイントの更新
このステップでは、React Routerパッケージから必要なコンポーネントをインポートし、ロードされるルートに応じて異なるコンポーネントをレンダリングするようにApp
コンポーネントを構成します。 これにより、アプリケーションのさまざまなページをナビゲートできます。 ユーザーがルート(/create
など)にアクセスすると、React Routerは指定されたパスを使用して、そのようなルートを処理するために定義された適切なコンポーネント内のコンテンツとロジックをレンダリングします。
./src/App.tsx
に移動します。
nano App.tsx
次に、そのコンテンツを次のものに置き換えます。
/src/App.tsx
import * as React from 'react';
import './App.css';
import { Switch, Route, withRouter, RouteComponentProps, Link } from 'react-router-dom';
import Home from './components/Home';
import Create from './components/customer/Create';
import EditCustomer from './components/customer/Edit';
class App extends React.Component> {
public render() {
return (
);
}
}
export default withRouter(App);
React Routerパッケージから必要なすべてのコンポーネントをインポートし、顧客の詳細を作成、編集、表示するための再利用可能なコンポーネントもインポートしました。
App.tsx
を保存して終了します。
./src/index.tsx
ファイルは、このアプリケーションのエントリポイントであり、アプリケーションをレンダリングします。 このファイルを開き、React Routerをインポートしてから、App
コンポーネントをBrowserRouter
内にラップします。
/src/index.tsx
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import { BrowserRouter } from 'react-router-dom';
import * as serviceWorker from './serviceWorker';
ReactDOM.render(
, document.getElementById('root')
);
serviceWorker.unregister();
React Routerは、BrowserRouter
コンポーネントを使用して、履歴や現在のパスなどのナビゲーションをアプリケーションに認識させます。
Index.tsx
の編集が終了したら、保存して終了します。
最後に、Bootstrapを使用して、アプリケーションにスタイルを追加します。 Bootstrapは、レスポンシブなモバイルファーストプロジェクトをWeb上で開発するための一般的なHTML、CSS、およびJavaScriptフレームワークです。 開発者は、CSSを大量に記述することなく、魅力的なユーザーインターフェイスを構築できます。 レスポンシブグリッドシステムが付属しており、すべてのデバイスで機能するWebページを完成した外観にします。
アプリケーションにブートストラップとスタイリングを含めるには、./src/App.css
の内容を次のように置き換えます。
/src/App.css
@import 'https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css';
.form-wrapper {
width: 500px;
margin: 0 auto;
}
.App {
text-align: center;
margin-top: 30px;
}
nav {
width: 300px;
margin: 0 auto;
background: #282c34;
height: 70px;
line-height: 70px;
}
nav ul li {
display: inline;
list-style-type: none;
text-align: center;
padding: 30px;
}
nav ul li a {
margin: 50px 0;
font-weight: bold;
color: white;
text-decoration: none;
}
nav ul li a:hover {
color: white;
text-decoration: none;
}
table {
margin-top: 50px;
}
.App-link {
color: #61dafb;
}
@keyframes App-logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
ここでBootstrapを使用して、デフォルトのレイアウト、スタイル、色を指定することにより、アプリケーションのルックアンドフィールを向上させました。 また、特にナビゲーションバーにいくつかのカスタムスタイルを追加しました。
App.css
を保存して終了します。
このセクションでは、ユーザーがアクセスしたルートに応じて適切なコンポーネントを表示するようにReact Routerを構成し、ユーザーにとってアプリケーションをより魅力的にするためのスタイリングを追加しました。 次に、アプリケーションに実装されているすべての機能をテストします。
[[step-5 -—- running-your-application]] ==ステップ5—アプリケーションの実行
いくつかの再利用可能なコンポーネントを作成して、ReactとTypeScriptを使用してこのアプリケーションのフロントエンドをセットアップし、json-server
を使用してREST APIを構築したので、アプリを実行できます。
プロジェクトのルートフォルダーに戻ります。
cd ~/typescript-react-app
次に、次のコマンドを実行してアプリを起動します。
yarn start
[.note]#Note:サーバーが他のターミナルウィンドウでまだ実行されていることを確認します。 それ以外の場合は、次のように開始します:yarn server
。
#
http://localhost:3000
に移動して、ブラウザーからアプリケーションを表示します。 次に、Createボタンをクリックして、顧客の詳細を入力します。
入力フィールドに適切な値を入力した後、Create Customerボタンをクリックしてフォームを送信します。 新しい顧客の作成が完了すると、アプリケーションによってホームページにリダイレクトされます。
いずれかの行のEdit Customerボタンをクリックすると、その行の対応する顧客の編集機能をホストするページに移動します。
顧客の詳細を編集し、Edit Customerをクリックして顧客の詳細を更新します。
アプリケーションを実行して、すべてのコンポーネントが機能していることを確認しました。 アプリケーションのさまざまなページを使用して、顧客エントリを作成および編集しました。
結論
このチュートリアルでは、ReactとTypeScriptを使用して顧客リスト管理アプリを作成しました。 このチュートリアルのプロセスは、Reactでアプリケーションを構築および構築する従来の方法としてJavaScriptを使用することとは異なります。 TypeScriptを使用する利点を活用して、このフロントエンドに焦点を当てたチュートリアルを完了しました。
このプロジェクトの開発を継続するには、モックバックエンドサーバーをExpressやNest.jsなどの本番環境に対応したバックエンドテクノロジに移動します。 さらに、Passport.js認証ライブラリなどのさまざまなツールを使用して認証や承認などの機能を追加することにより、このチュートリアルで構築したものを拡張できます。
プロジェクトon GitHubの完全なソースコードを見つけることができます。