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 テーブルに複雑なテーブル ヘッダーを実装するためのサンプル コード

複雑な表を作成するには HTML を使用します。複雑なテーブルでは通常、td の rowspan 属...

CSSスプライト技術は複数の背景を1つのPNG画像に統合しますCSSポジショニング

アメリカのYAHOOがページ制作で使用している画像統合技術。これらのアイコン、列背景、画像ボタンを定...

Linuxで$を#に変更する方法

このシステムでは、# 記号は root ユーザーを表し、$ 記号は通常のユーザーを表します。では、ど...

CSSは親要素の下の最初の子要素を選択します(:first-child)

序文最近、プロジェクトで :first-child を使用したのですが、すぐに思いつきました。これは...

react-navigation6.xルーティングライブラリの基本的な使い方の詳しい説明

目次react-nativeプロジェクトの初期化react-nativeプロジェクトをインストールす...

WeChatアプレットがシンプルな計算機機能を実装

この記事では、WeChatアプレットの計算機機能を実装するための具体的なコードを参考までに紹介します...

複数の条件を持つ MySQL クエリ メソッド

複数の条件を持つ MySQL クエリ環境: MySQL 5.7 where ステートメントに複数の ...

Linux xargsコマンドの使用

1. 機能: xargs は、stdin 内のスペースまたは改行で区切られたデータをスペースで区切ら...

Redhat 8.0 システムのインストール方法に関するグラフィック チュートリアル (初心者には必須)

目次1. はじめに2. インストール01. 新しい仮想マシンを作成する02. システムをインストール...

CSS カウンターとコンテンツの概要

コンテンツ プロパティは CSS 2.1 で導入され、:before および :after 疑似要素...

MySQL 4G メモリ サーバー構成の最適化

会社のウェブサイトのアクセス数が増えてくると(1日10万PV以上)、当然MySQLがボトルネックにな...

Vue Element-ui フォーム検証ルールの実装

目次1. はじめに2. ルール検証の入力モード2.1 サンプルコード2.2、フォーム項目2.3. 小...

画像比較を実現するjQueryプラグイン

この記事の例では、画像比較を実現するためのjQueryプラグインの具体的なコードを参考までに共有して...

Vueの計算プロパティの詳細な説明

1. 計算属性とは何ですか? 簡単に言えば、計算された結果が属性に保存されるもので、キャッシュとして...

MySQLエラー10061を解決する方法

この記事では、「'localhost' (10061) の MySQL サーバーに接...