ViteでReactプロジェクトを構築する方法

ViteでReactプロジェクトを構築する方法

序文

毎日鳩、火ばさみ劉明

これは vite 上に構築された React プロジェクトであり、開発エクスペリエンスは素晴らしいです。

Viteプロジェクトを作成する

糸作成@vitejs/app 

上図のように、react-tsのプリセットテンプレートが選択されています。以下のようなプロジェクトが表示されたら

yarn // 依存関係をインストール yarn dev // 開発環境を起動

ブラウザを開き、上図のように http://localhost:3000/#/ と入力します。おめでとうございます。React プロジェクトを通常どおり開発できます。エンディングスプリンクルフラワー

それでもうまくいかない場合は、私が書いたものよりも詳しい情報が記載されている Vite の公式 Web サイトにアクセスしてください。

改修プロジェクト

しかし、上記はあくまでも基本的な React デモです。実際の開発プロジェクトでは、これだけでは十分ではなく、追加のプロジェクト構成が必要になります。

ディレクトリの規則

日々の開発習慣に従って、まず基本的なディレクトリ規則を作成します

├── dist/ // デフォルトのビルド出力ディレクトリ └── src/ // ソースコードディレクトリ ├── asset/ // 静的リソースディレクトリ ├── config      
  ├── config.js // プロジェクトの内部業務に関わる基本設定├── components/ // 公開コンポーネントディレクトリ├── service/ // 業務リクエスト管理├── store/ // 共有ストア管理ディレクトリ├── until/ // ツール機能ディレクトリ├── pages/ // ページディレクトリ├── router/ // ルーティング設定ディレクトリ├── .main.tsx // Vite 依存関係メインエントリ├── .env // 環境変数設定├── vite.config.ts // Vite 設定選択、詳細は公式サイトの api を参照してください
└── package.json

ルートの設定

main.tsxを修正する

'react' から React をインポートします
'react-dom' から ReactDOM をインポートします。
'react-router-dom' から { HashRouter、Route、Switch } をインポートします。
'./router/index' から routerConfig をインポートします。
'./base.less' をインポートします

ReactDOM.render() は、
 <React.StrictMode>
 <ハッシュルーター>
  <スイッチ>
  {
   routerConfig.routes.map((ルート) => {
   戻る (
    <ルートキー={route.path} {...route} />
   )
   })
  }
  </スイッチ>
 </ハッシュルーター>
 </React.StrictMode>,
 ドキュメント.getElementById('ルート')
)

router/index.ts ファイルの設定

'@/pages/blogs/index' から BlogsList をインポートします。
'@/pages/blogs/detail' から BlogsDetail をインポートします。

エクスポートデフォルト{
 ルート: [
 { 正確: true、パス: '/'、コンポーネント: BlogsList },
 { 正確: true、パス: '/blogs/detail/:article_id'、コンポーネント: BlogsDetail },
 ]、
}

上記の設定を参考にして、リダイレクト、遅延読み込み、その他の一般的なルーティング設定項目などの他のプロパティを設定することができます。

さらに、私は個人的には構成を通じてルートを生成することを好み、従来のルーティングは常に不便に感じます。

サービス管理

すべてのプロジェクトリクエストはサービスに投入されます。以下に示すように、各モジュールに対応するファイル管理を行うことをお勧めします。

'./information' から * を情報としてインポートします
'./base' から * をベースとしてインポートします。

輸出 {
 情報、
 ベース
}

これによりリクエスト管理が容易になります

base.tsは、特別なビジネス処理を処理できるビジネスリクエストクラスです。

'../until/request' から { request } をインポートします。

定数プレフィックス = '/api'

エクスポートconst getAllInfoGzip = () => {
 リクエストを返す({
 url: `${prefix}/apis/random`,
 メソッド: 'GET'
 })
}

統一されたリクエストメソッドとして、until/request をカスタマイズしたり、fetch や axios などのリクエストライブラリに置き換えたりすることができます。同時に、一般的なインターセプションロジックをこのメソッドにカプセル化することができます。

'qs' から qs をインポートします
「axios」からaxiosをインポートします。

インターフェースIRequest{
 url: 文字列
 パラメータ: SVGForeignObjectElement
 クエリ?: オブジェクト
 ヘッダー?: オブジェクト
 メソッド: "POST" | "OPTIONS" | "GET" | "HEAD" | "PUT" | "DELETE" | 未定義
}

インターフェースIResponse{
 カウント: 数
 errorMsg: 文字列
 分類: 文字列
 データ: 任意
 詳細: 任意
 画像?: オブジェクト
}

エクスポートconst request = ({ url, params, query, header, method = 'POST' }: IRequest): Promise<IResponse> => {
 新しい Promise を返します ((resolve, reject) => {
  axios(クエリ? `${url}/?${qs.stringify(query)}`: url, {
   データ: パラメータ、
   ヘッダー: ヘッダー、
   方法: 方法、
  })
   .then(res => {
    解決(res.data)
   })
   .catch(エラー => {
    拒否(エラー)
   })
 })
}

具体的な一般的なインターセプトについては、axios 構成を参照するか、独自のビジネス ニーズに合わせて自分で書き直してください。

ここで axios を使用して構築されたリソースに問題があります。直接使用しないでください。以前のリクエストのカプセル化を参照して、fetch に置き換えてください。クラスメートが正常に構築した場合は、メッセージを残してください = =!

特定の業務を開発して使用する場合、モジュール名に従ってインポートすることができ、対応するインターフェースモジュールを簡単に見つけることができます。

「@/service/index」から { 情報 } をインポートします。

const { data } = information.getAllInfoGzip({ id }); を待機します。

この一連のルールは、ストア、ルーター、ユーティリティなど、モジュールを分解できる場所にも適用できるため、プロジェクトのメンテナンスに役立ちます。

上記は、プロジェクトのビジネス開発構成と合意の一部です。学生は、自分のチームの規則や好みに応じてこれらを変更できます。

その他の構成

これは主に vite.config.ts の構成と、プロジェクト全体の追加構成に関するものです。

'vite' から {defineConfig} をインポートします
'@vitejs/plugin-react-refresh' から reactRefresh をインポートします。
'vite-plugin-imp' から vitePluginImp をインポートします

デフォルトのdefineConfigをエクスポートする({
 プラグイン: [
 反応リフレッシュ()、
 vitePluginImp({
  ライブラリリスト: [
  {
   ライブラリ名: 'antd-mobile',
   スタイル(名前) {
   `antd-mobile/lib/${name}/style/index.css` を返します
   },
  },
  ]
 })
 ]、
 解決する: {
 拡張子: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json'],
 エイリアス: {
  '@': '/src'
 }
 },
 サーバー: {
 プロキシ: {
  // オプションの書き込み '/api': {
  ターゲット: 'https://www.xxx.xxx',
  変更元: true、
  書き換え: (path) => path.replace(/^\/api/, '')
  },
 }
 },
 css: {
 ポストcss: {
  プラグイン: [
  require('postcss-pxtorem')({ // px単位をrem単位に変換します。rootValue: 32, // 変換ベース、デフォルトは100なので、ルートタグのフォントサイズは1rem = 50pxに設定され、デザインドラフトから必要なpx数を測定し、コードで直接pxを追加できます。
   propList: ['*'], //プロパティセレクター、*は一般を示します unitPrecision: 5, //REM単位が拡張できる小数点以下の桁数と、小数点以下の桁数。
   exclude: /(node_module)/, // デフォルトは false ですが、正規表現を使用して特定のフォルダーを除外することができます (reg)})
  ]
 }
 }
})

基本的な内容もいくつかあります:

  • vitePluginImpはantd-mobileをオンデマンドでロードします
  • postcss-pxtoremはモバイルのpx変換を設定するためのプラグインです
  • server.proxyはプロジェクトプロキシを設定します
  • resolve.alias はエイリアスを設定します。vscode で正常に認識させるには、ts.config も設定する必要があります。
{
 "コンパイラオプション": {
 "ベースURL": "./",
 「パス」: {
  "@/*": [
  "ソース/*"
  ]
 },
}

antd-mobile を antd に置き換えたり、好みに応じて postcss を置き換えたりすることもできます。

上記の簡単な変換により、通常の小規模プロジェクト開発が実行できるようになりました。完成してお花を散りばめました!

そして、私はこの構成を使用して簡単な H5 プロジェクトを作成しました。プロジェクトが繰り返されるにつれて、テンプレートを徐々に改善していきます。

Vite で React プロジェクトを構築する手順についてはこれで終わりです。Vite で React プロジェクトを構築する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • フックを使用して React コンポーネントを書くときに注意すべき 5 つの点
  • React+Ant Design開発環境をセットアップするための実装手順
  • 入力ボックスの値を取得する方法のReactの例
  • Reactはラジオコンポーネントのサンプルコードを実装します
  • React Router で履歴リダイレクトを使用する方法
  • React Contextの理解と応用についてお話ししましょう
  • Reactフック入門チュートリアル
  • React と Threejs を使用して VR パノラマ プロジェクトを作成する詳細なプロセス
  • ReactのEffectListの簡単な分析

<<:  Hadoop におけるネームノードとセカンダリネームノードの動作メカニズムの説明

>>:  Alibaba Cloud ECS centos6.8 に MySql5.7 をインストールして設定するチュートリアル

推薦する

Win10 MySQLでCSVをエクスポートする2つの方法

Win10 で csv をエクスポートする方法は 2 つあります。1 つ目はツールを使用することです...

ウェブデザインで注意すべき検索最適化の知識

1. 新サイトホームページのリンクレイアウト1. リンク配置の位置:リンク配置の位置によって、リンク...

mysql 簡単な操作例を表示

この記事では、例を挙げて mysql show 操作について説明します。ご参考までに、詳細は以下の通...

MYSQL スロークエリとログ設定とテスト

1. はじめにスロークエリログを有効にすると、MySQL は指定された時間を超えるクエリステートメン...

MySQLデータベースを定期的に自動バックアップする方法

データは貴重なものであることは誰もが知っています。データをバックアップしなければ、データをそのまま放...

発生したブラウザの互換性の問題と解決策(推奨)について

序文:先週の日曜日、先輩から3ページ作るのを手伝って欲しいと頼まれました。データのやり取りなどはなく...

Vueは右上隅の時間表示のリアルタイム更新を実装します

この記事の例では、右上隅の時間表示のリアルタイム更新を実現するためのVueの具体的なコードを紹介しま...

docker.service 起動エラーの詳細なトラブルシューティング

エラーを報告するには次のコマンドを実行しますsystemctl dockerを再起動しますエラーメッ...

MySQL で特定の親行のすべての子行を見つけるソリューション

序文注: テストデータベースのバージョンはMySQL 8.0ですテーブルを作成し、ユーザー scot...

CSS スキル コレクション - 古典の中の古典

リンク上の点線のボックスを削除しますコードをコピーコードは次のとおりです。 a:アクティブ、a:フォ...

React Hooksを使用する際のよくある落とし穴

React Hooks は React 16.8 で導入された新しい機能で、クラスを使用せずに状態や...

Dockerでrabbitmqをデプロイする際に発生した2つの問題

1. 背景DockerでRabbitMQをデプロイする際に、次の2つの問題が発生します。問題1: ス...

MySQL 8.0.18 のインストールと設定のグラフィックチュートリアル

学習目標: Windowsシステムを使用してMySQLデータベースをインストールする方法を学びます。...

SQL 実践演習: オンライン モール データベース ユーザー情報データ操作

オンラインショッピングモールデータベース - ユーザー情報データ運用プロジェクトの説明電子商取引の台...

Harborを使用してプライベートDockerリポジトリを構築する方法

目次1. オープンソースの倉庫管理ツール Harbor 2 インストール2.1 DockerとDoc...