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 をインストールして設定するチュートリアル

推薦する

HTML フローティング フレーム (iframe 読み込み HTML) の設定と使用の例

コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...

要素内の TimePicker は時間の一部を無効にします (分単位で無効)

プロジェクトの要件は、日付と時刻を選択し、現在の時刻以降の時刻のみを選択し、最小レベルを分単位で無効...

MySQL オンライン DDL ツール gh-ost 原理分析

目次1. はじめに1.1 原則1.2 プロセス1.3 特徴1.4 githubアドレス2. テスト環...

シェルスクリプトによるDockerコンテナの起動順序の制御の詳細な説明

1. 遭遇した問題分散プロジェクトの展開プロセスでは、サーバーの再起動後にアプリケーション(データベ...

MySQLオンラインデータベースのデータをクリーンアップする方法

目次01 シナリオ分析02 操作方法03 結果分析01 シナリオ分析今日の午後、開発仲間がオンライン...

CSS でデフォルトのスタイルをクリアし、共通のスタイルを設定する方法

CSS デフォルトスタイルをクリア通常の明確なデフォルト スタイル: *{ マージン:0; パディン...

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

1. インストールパッケージMYSQLサービスダウンロードアドレス:MySQL公式サイトからダウンロ...

Google の新しい UI から学べること (画像とテキスト)

2011 年に最も顕著なウェブサイトの変更は、一連の製品に新しいユーザー インターフェースを導入した...

Portainer を使用して複数の Docker コンテナ環境を管理する方法を説明します。

目次Portainerは複数のDockerコンテナ環境を管理します2. Dockerを管理する2.1...

Linux での MySQL データベースのアンインストール

Linux で MySQL データベースをアンインストールするにはどうすればいいですか? 以下では、...

Mysql は、デッドロック問題を解決するために kill コマンドを使用します (実行中の特定の SQL ステートメントを強制終了します)。

MySQL を使用して特定のステートメントを実行すると、データ量が多いためにデッドロックが発生し、...

JavaScript における 3 つの for ループ ステートメントの使用の概要 (for、for...in、for...of)

序文JS に触れるすべての開発者は、必然的に for ループを扱うことになります。結局のところ、fo...

easycomモードでUNI-APPコンポーネントを呼び出す際に習得する必要がある実践的なスキル

この記事は議論の出発点となることを目的としています。詳細なドキュメントと easycom の仕様につ...

vueはEle.me UIを使用してteambitionのフィルタリング機能を模倣します

目次問題の説明一般的な機能効果は次のとおりです。思考分析完全なコード要約する問題の説明Teambit...

JavaScript strictモードの概要 strictを使用する

目次1. 概要1.1 厳密モードとは何ですか? 1.2 厳密モードの目的2. 厳密モードを有効にする...