プロジェクトにおける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 に接続するチュートリアル

推薦する

Reactスロットの使い方

目次必要コアアイデアReactでスロットを実装する2つの方法必要コンポーネントを自分で書きました。コ...

Linux DockerでSpringbootプロジェクトを実行するための詳細な手順

導入: springboot プロジェクトを実行する Docker の構成は実は非常にシンプルで、L...

Docker+jenkins+python3環境を使用して非常に詳細なチュートリアルを構築する

序文:自動化を記述した後、毎日サーバー上で実行する必要があります。このような問題に遭遇しました。Je...

Centos 7.4 でリモート アクセス制御を実装する方法

1. SSHリモート管理SSH はセキュア チャネル プロトコルであり、主にリモート ログイン、リモ...

WeChatアプレット学習ノート: ページ構成とルーティング

最近、小さなプログラムの開発を勉強して見直しており、学習結果のいくつかをメモしています。公式の We...

MySQL 8.0ドライバとAlibaba Druidバージョン間の互換性の問題を解決

この記事では主に、MySQL 8.0 ドライバーと Alibaba Druid バージョン間の互換性...

Win10 + Ubuntu 16.04 デュアルシステム 完璧なインストールチュートリアル [詳細]

必ずデータをバックアップすることを忘れないでください。データは貴重なものです! ! !コンピュータモ...

HTMLの行間設定方法と問題点

<p></p> の行間隔を設定するには、style="line-h...

webpack -v エラー解決

背景webpackのバージョンを確認したいのですが、webpack -vを実行するとエラーが報告され...

select count() と select count(1) の違いと実行方法

Count(*) または Count(1) または Count([column]) は、おそらく S...

Vue diffアルゴリズムの完全な分析

目次序文Vue 更新ビューパッチ同じVノードパッチVノード更新子供序文Vue は仮想 DOM を使用...

js 配列から重複を削除する 11 の方法

実際の業務や面接では、「配列の重複排除」の問題によく遭遇します。以下は、js を使用して実装された配...

linuxdeployqt を使用して Ubuntu で Qt プログラムをパッケージ化する問題を解決する

いくつかの Qt インターフェース プログラムを作成しましたが、Qt 環境がインストールされていない...

JSは文字列内の指定された文字列のn番目の出現位置を取得します

文字の位置を取得するための同様の方法について学習します。 charAt() 文字列内の指定された位置...

Nginx フォワードプロキシとリバースプロキシの違いと原理分析

1. フォワードプロキシとリバースプロキシの違いフォワード プロキシはクライアントのプロキシとして機...