プロジェクトにおけるVue3のロジック抽出とフィールド表示についての簡単な説明

プロジェクトにおけるVue3のロジック抽出とフィールド表示についての簡単な説明

論理階層化

vue3を使用してプロジェクトを開発する場合、
地域階層化をどのように行うのか? ? ? ?
たとえば、単純な粒子の領域には、[クエリロジック、変更された保存ロジック、新規追加ロジック、削除ロジック]があります。
このページには他の領域がある可能性があります。エリアA、エリアB、エリアC…[ロジックは多数あります]
この時点で、エリアのロジックを分離することができます

異なる地域から事業を分離

エクスポートデフォルト{
  設定 () {
    {queryDo、addDo、delDO、EditDo} を allFun() にします。
    queryDo(); //クエリインターフェースが呼び出されます}
}

// これはページ関数 allFun(){ の領域 A のロジックです
  console.log('私はallFun関数内の直接のステートメントであり、実行されます')
  関数queryDo(){
    console.log('インターフェースをクエリし、バックエンドデータを呼び出しています')
  }
  関数addDo(){
    console.log('私は初心者です')
  }
  関数delDO(){
    console.log('削除しました')
  }
  関数EditDo(){
    console.log('私は編集インターフェースです')
  }
  {queryDo、addDo、delDO、EditDo} を返します
}
</スクリプト>

これを実行する利点

  • allFun 関数を見てみましょう。
  • このエリアの論理をすべて知ることができる
  • CRUD が含まれます。後のメンテナンスに便利

このようなシナリオにどう対処するか

ビジネスロジックを書くときは、
最終的に、領域 A と領域 B の両方で同じインターフェースを呼び出す必要があることがわかりましたが、領域 A では呼び出されるインターフェースがすでに記述されているため、領域 A でインターフェースを直接呼び出す必要があります。

<スクリプト>
エクスポートデフォルト{
  設定 () {
    // ここで使用される構造はエリア A です。let {queryDo,addDo,delDO,EditDo}=aAreaAllFun();

    // エリア B let {querHander}=bAreaAllFun();

    {queryDo、addDo、delDO、EditDo、querHander} を返します
  }
}

// これはAエリアページ上の特定のエリアのロジックです。function aAreaAllFun(){
  関数queryDo(){
    console.log('私はエリアAのクエリインターフェースです')
  }
  関数addDo(){
    console.log('私は初心者です')
  }
  関数delDO(){
    console.log('削除しました')
  }
  関数EditDo(){
    console.log('私は編集インターフェースです')
  }
  {queryDo、addDo、delDO、EditDo} を返します
}

// これはエリアBのビジネスロジックです。関数bAreaAllFun(){
  // エリア A のクエリ インターフェイスを直接呼び出します。aAreaAllFun().queryDo();

  関数querHander(){
    console.log("エリア B のクエリ インターフェイス")
  }
 
  {querHander} を返す
}
</スクリプト>

使用していますが
aAreaAllFun() クエリを実行します。
領域 A のクエリ インターフェイスを直接呼び出すと問題は解決しますが、クエリ インターフェイスが領域 A に含まれるという新しい問題が発生します。
最後のアプローチは、クエリ インターフェイスを分離することです。
これにより、後のメンテナンスも容易になります

最適化

<スクリプト>
エクスポートデフォルト{
  設定 () {
     // これはAエリアページの特定のエリアのロジックです。let {addDo,delDO,EditDo}=aAreaAllFun()
    
    // これは B エリア ページ上の特定のエリアのロジックです。let {querHander}=bAreaAllFun();

    {queryDo、addDo、delDO、EditDo、querHander} を返します
  }
}

// パブリッククエリインターフェース 多くの領域では関数 queryDo(){ が使用される可能性があります
  console.log('私は地域のクエリインターフェースです、引き出されました')
}

// これはAエリアページ上の特定のエリアのロジックです。function aAreaAllFun(){
 
  関数addDo(){
    console.log('私は初心者です')
  }
  関数delDO(){
    console.log('削除しました')
  }
  関数EditDo(){
    console.log('私はエディターインターフェースです')
  }
  {addDo,delDO,EditDo} を返します
}

// これはエリアBのビジネスロジックです。関数bAreaAllFun(){
  // パブリック クエリ インターフェイス queryDo() を直接呼び出します。

  関数querHander(){
    console.log("エリア B のクエリ インターフェイス")
  }
 
  {querHander} を返す
}
</スクリプト>

必ずしもセットアップ関数にreactiveを書く必要はない

多くの友人は、reactive はセットアップ関数内に記述する必要があると考えています。実際はそうではありません。必要な場所に記述できます。たとえば、次の aAreaAllFun 関数内で reactive を使用できます。

<テンプレート>
  <div>
    <h2>名前: {{ areaData.info.name}}</h2>
    <h2>年齢: {{ areaData.info.age}}</h2>
    <h2>性別: {{ areaData.info.sex}}</h2>
  </div>
</テンプレート>
<スクリプト>
'@vue/reactivity' から { reactive } をインポートします。
エクスポートデフォルト{
  設定 () {
 
    {addDo,areaData}=aAreaAllFun() とします。

    {addDo,areaData} を返します
  }
}
// これはAエリアページ上の特定のエリアのロジックです。function aAreaAllFun(){
  areaData = リアクティブ({
    情報:
      名前:「張三」
      年齢:20歳
      性別: '男性'
    }
  })
  関数addDo(){
    console.log('私は初心者です')
  }
  {addDo,areaData} を返します
}
</スクリプト>

ページに値を直接表示する方法

上記の例では、名前、年齢、性別を実装したいので、areaData.info.xxxが必要です。
これは面倒すぎるので最適化する必要がある

<テンプレート>
  <div>
    <h2>名前: {{ name}}</h2>
    <h2>年齢: {{ age}}</h2>
    <h2>性別: {{ sex}}</h2>
  </div>

  <button @click="ChangeCont">値を変更</button>
</テンプレート>
<スクリプト>
'vue' から { reactive,toRefs } をインポートします。
エクスポートデフォルト{
  設定 () {
    {名前、年齢、性別、ChangeCont}=aAreaAllFun() とします。
    {名前、年齢、性別、ChangeCont} を返します
  }
}
// これはAエリアページ上の特定のエリアのロジックです。function aAreaAllFun(){
  areaData = リアクティブ({
    情報:
      名前:「張三」
      年齢:20歳
      性別: '男性'
    }
  })

  関数ChangeCont(){
    // この方法で値を変更すると、ビューは応答しなくなります。[エラー]
    //エリアデータ.info={
    // 名前:'Li Si',
    //年齢:21,
    // 性別:'男性'
    // }

    // ビューを正しく更新するにはこれで OK です [ok]
    エリアデータ情報名='123'
    エリアデータ.info.age=12
    areaData.info.sex='男性'
  }

  // toRefs はレスポンシブ オブジェクトを通常のオブジェクトに変換できます。
  // この共通オブジェクトのすべての値は参照です。
  // ref になるので、値を使用する必要があります。
  {ChangeCont,...toRefs(areaData.info)} を返します。
}
</スクリプト>

プロジェクトにおけるvue3のロジック抽出とフィールド表示に関するこの記事はこれで終わりです。より関連性の高いvue3のロジック抽出とフィールド表示コンテンツについては、123WORDPRESS.COMで過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも123WORDPRESS.COMをよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vueはユーザー定義フィールドにデータを表示する方法を実装します

<<:  Mysql 8.0.18 ハッシュ結合テスト (推奨)

>>:  portainer を使用してリモート docker に接続するチュートリアル

推薦する

Linux での mysql および mysql.sock のインストールに関する問題

最近、Linux に Aphace、mysql、php をインストールするときに多くの問題に遭遇しま...

MySQL の一時テーブルと派生テーブルについての簡単な説明

派生テーブルについてメイン クエリに派生テーブルが含まれている場合、または SELECT ステートメ...

MYSQL から MARIADB へのプロジェクト移行に関するチュートリアル

データベース (MySQL) を準備します。すでに MySQL をお持ちの場合は、これを無視できます...

HTML におけるメタの役割について (インターネットから収集および分類)

W3Cschoolではこのように説明しています<meta> 要素は、検索エンジン向けの説...

Dockerでコンテナを作成するときにコンテナIPを指定する実装例

Docker はコンテナを作成するときに、デフォルトでブリッジ ネットワークを使用し、IP アドレス...

Centos8環境でSSHポート番号を変更する方法

目次序文始める序文サーバーのデフォルトの SSH ポート番号は通常 22 であるため、ほとんどのユー...

25 div+css プログラミングのヒントとコツ

1. ul タグには、Mozilla ではデフォルトでパディング値がありますが、IE ではマージン値...

VirtualBoxにOpenSuseをインストールする方法

仮想マシンはホストマシンにインストールされます。 CPU とメモリはホスト マシンと共有する必要があ...

PHP+nginx サービス 500 502 エラーのトラブルシューティングのアイデアの詳細な説明

概要オンラインサービスへのアクセス中に 500 または 502 エラーが発生した場合、緊急処理とトラ...

原因不明のMySqlサービス消失の解決策

原因不明のMySqlサービス消失の解決策先ほど、MySQL-Front が突然 MySql を開けな...

MySQL 中断された接続警告ログの分析

序文:場合によっては、MySQL に接続されたセッションが異常終了することが多く、エラー ログに「通...

Linux のファイル圧縮とパッケージ化の概要

1. 圧縮と包装の概要一般的な圧縮ファイルウィンドウズ .rar .zip .7z Linux .z...

Vue プロジェクトで mock.js を使用するための完全な手順

Vue プロジェクトで mock.js を使用する開発ツールの選択: Vscode 1. コマンドラ...

MySQL で珍しい文字を挿入できないときの対処方法 (文字列値が正しくない)

最近、ビジネス側から、一部のユーザー情報の挿入に失敗し、エラー メッセージが「不正な文字列値:&qu...