WeChat ミニ プログラム クラウド開発のクイック スタート (2/4)

序文

「WeChat ミニ プログラム クラウド開発クイック スタート (1/4)」の知識を復習しましょう。前章ではクラウド開発のメリットと機能を学び、コードボーイメモのローカル版からオンライン版への移行を完了し、主にクラウドデータベースとクラウドを利用したクラウドデータベースの直接運用について学びました。アプレット内の API:

  • get() を使用してデータベースにクエリを実行します
  • add()を使用してデータを追加しました
  • update()を使用したデータ変更
  • データはremove()を使用して削除されました

この章では、実際のビジネスでもよく使われる「ソート」、「精密」、「ファジー」、「ページング」の4つのクエリ方法を紹介します。

リストの並べ替え

デフォルトでは、アプレットによってクエリされたリストは時間順に並べ替えられ、最後に追加された最新データが表示されます。ただし、実際の要件は、最新の追加が一番上にある必要があるため、現時点では並べ替え関数 orderBy を使用して並べ替えルールを変更する必要があります。

orderBy での具体的な使用方法 (get メソッドを使用する前に使用される、データベース オブジェクトを通じて直接チェーンされるメソッド):
ドキュメント サンプル コード: 進捗状況による昇順ソート To Do 項目

db.collection('todos').orderBy('progress', 'asc')
  .get()
  .then(console.log)
  .catch(console.error)

パラメータは次のとおりです。

  1. ソートするフィールドの名前
  2. 特定のルールを並べ替える
  • asc: 小さいものから大きいものへの昇順
  • desc: 大きいものから小さいものへの降順

同時に、複数のフィールドの組み合わせと並べ替えをサポートしており、呼び出し順序に従って優先順位が決定されます。
この API を学習するときに、具体的な要件を実現する方法を考えてみましょう。この要件を実現するには 2 つの方法があります。 :

新しい時間フィールドの並べ替え

このとき、追加/変更時にタイムスタンプ フィールド createTime を設定し、タイムスタンプ フィールドで並べ替えることができます。
createTime 属性コードを追加し、編集ページの save メソッドに記述します
タイムスタンプを取得する 4 つの方法

let createTime1 = Date.parse(new Date()); // 精确到秒
let createTime2 = new Date().getTime(); // 精确到毫秒
let createTime3 = new Date().valueOf(); // 精确到毫秒
let createTime4 = Date.now(); // 精确到毫秒,实际上是new Date().getTime()

ソートコード:

db.collection('memo').orderBy('createTime', 'desc').get()

結合された時間フィールドの並べ替え

さらに、新しいフィールドを追加せずに、複数のフィールドを使用して並べ替えを行い、同じ効果を達成した学生もいます。

db.collection('memo').orderBy('date','desc').orderBy('time','desc').get()

最初に日付が並べ替えられ、次に時刻が並べ替えられます。ここで注意が必要なのは、時間だけをソートする学生もおり、この場合、同じ日のデータであれば普通にソートされるのですが、複数日になると順番がめちゃくちゃになってしまいます。

コンテンツによるクエリ

メモを効率よく探すためには検索が欠かせませんので、次にwhere関数を使って検索機能を実装していきます。まず第一に、検索ボックスが必要です。ここでちょっとしたトリックを説明します。一般的に使用されるコンポーネントの一部は、成熟した UI コンポーネント ライブラリを参照することですぐに実装できます。前回は、npm アプリケーション時間ツールキットの使用方法を学習しました。次に、ライブラリは WeUI コンポーネントをインポートします。

UIコンポーネントライブラリを使用する

  1. app.json で設定します。
{
  "useExtendedLib": {
    "weui": true
  }
}

これは、対応する拡張ライブラリに関連する npm パッケージの最新バージョンを導入するのと同等であり、アプレットのパッケージ サイズを占有しません。
2. 使用するページの json で検索コンポーネントを構成します

{
  "usingComponents": {
    "mp-searchbar": "weui-miniprogram/searchbar/searchbar"
  }
}

  1. ページ上の必要な場所にレイアウト コードを追加し、リストの上と見出しの下に挿入します。
<view>
  <!-- 头部布局 -->
   <view class="page__bd">
    <mp-searchbar bindinput="searchTitle" ></mp-searchbar>
  </view>
  <!-- 列表布局 -->
</view>

表示効果:

6fec9202308041703293100.png

4. 入力ボックスのデータを監視する

searchTitle: function (event) {
    console.log('search',event.detail.value)
  }

この時点で、UIコンポーネントライブラリに関しては「最近出会ったな」という気持ちを誰もが抱いているはずです。ただし、そうは言っても、コンポーネント ライブラリはよく使用されるコンポーネントのみをカバーしています。コンポーネント ライブラリにコンポーネントがない場合でも、正直に記述する必要があります。したがって、スタイルを記述する能力は依然として非常に重要であり、もっと練習する必要があります学習プロセス中に。

正確なクエリ

データを取得したらクエリを開始しますが、ここで getMemoList 関数を変更する必要があります。

// 获取备忘录列表,支持搜索标题
function getMemoList(value) {
  // 1. 获取数据库引用
  const db = wx.cloud.database()
  // 2. 找到集合获取数据
  let memo = db.collection('memo')
  // 3. 判断是否有查询数据
  if (value) {
    memo = memo.where({
      title: value
    })
  }
  // 4. 判断查询返回数据
  return memo.orderBy('createTime', 'desc').get()
}

そして、聞いているときに呼び出します

searchTitle: function (event) {
    let value = event.detail.value
    getMemoList(value).then(res=>{
      console.log(res.data)
      this.udpateList(res.data)
    })
  }

効果を実感してください:

598bc202308041703525165.png

しかし、実際のシナリオでは、メモのタイトルが長すぎてユーザーが覚えにくい場合があるため、あいまい一致を使用することがよくあります。

ファジークエリ

ここでは、クエリ条件は主に正規表現で照合され、正規オブジェクトの構築には RegExp コンストラクターが使用されます。

memo.where({
      title: db.RegExp({
        regexp: value, //从搜索栏中获取的value作为规则进行匹配。
        options: 'i', //大小写不区分
    })

効果を実感してください:

34724202308041704078885.png

ページングクエリ

メモを長く使用するとデータも増加しますが、このとき実際の需要を一度にロードする必要はなく、ページングの需要も追随します。アプレット側はクラウドデータベースのget()を操作してデータAPIを取得し、一度に最大20件のレコードを取得できます。

では、データをどのようにページネーションするのでしょうか? 公式のケースは次のとおりです。

db.collection('todos')
  .where({
    _openid: 'xxx', // 填入当前用户 openid
  })
  .skip(10) // 跳过结果集中的前 10 条,从第 11 条开始返回
  .limit(10) // 限制返回数量为 10 条
  .get()
  .then(res => {
    console.log(res.data)
  })
  .catch(err => {
    console.error(err)
  })

主にスキップとリミットを通して。
スキップ: 最初から取得するデータの数制限
: 一度に取得するデータの数

実際の業務に合わせて導入してみよう

  1. ページ数とページあたりの量を定義します
 /**
   * 页面的初始数据
   */
  data: {
    pageNo:0, // 默认第一页
    pageSize:5, // 一页5条数据
  },

  1. 変換リストデータクエリ機能
function getMemoList(pageNo, pageSize) {
  const db = wx.cloud.database()
  return db.collection('memo')
    .skip(pageNo * pageSize)
    .limit(pageSize)
    .orderBy('createTime', 'desc')
    .get()
}

  1. 最初の呼び出しで渡されるパラメータ
onShow() {
    getMemoList(this.data.pageNo,this.data.pageSize).then(res => {
      this.udpateList(res.data)
    })
  }

  1. ページプルコールバックイベントをリッスンする
// 上拉加载
  onReachBottom (){
    this.loadList()
  }

  1. 特定のデータ読み込みロジックを実装する
async loadList(){
    // 1. 获取总条数
    let {total} = await getListTotal()
    // 2. 判断是否全部已经加载完毕
    if(this.data.list.length<total){
     // 如果没有加载完
     // 提示数据加载中
      wx.showLoading({
        title: '数据加载中...',
      })
      // 当前页+1
      this.data.pageNo ++
      // 获取下一页数据
      let {data} = await getMemoList(this.data.pageNo,this.data.pageSize)
      this.setData({
        // 拼接数据,页面展示
        list:this.data.list.concat(data)
      })
      // 关闭加载提示
       wx.hideLoading()
    }else{
    // 加载完成提示:“无更多数据”
      wx.showToast({
        icon:'error',
        title: '无更多数据',
      })
    }
  },

知らせ:

  • 上記のロジックでは、async/await を使用してコールバックを減らし、コードの読み取りと書き込みを容易にします。
  • 上記のロジックでリストの総数を取得するために使用される getListTotal では、count 関数を使用します。
function getListTotal() {
  const db = wx.cloud.database()
  return db.collection('memo').count()
}

指定された戻り値

実際の業務では、リストの小項目には多くの詳細が含まれることが多いですが、リストにはいくつかの重要な情報が表示されていればよいので、現時点では、リストに表示する必要があるフィールドをチェックし、戻り結果を指定するだけで済みます。必須フィールドがない場合は戻る必要はありませんので、フィールド達成をご利用ください。
例: 現在のリストには、タイトル フィールドのデータのみを表示する必要があります。

// 获取备忘录列表
function getMemoList(pageNo, pageSize) {
  const db = wx.cloud.database()
  return db.collection('memo')
    .field({
      title: true,
    })
    .get()
}

データリターン

26ad5202308041705045924.png

実際のビジネス シナリオでは、通常、リストはすべてのデータをクエリしません。詳細をクリックすると、ID を介してすべてのデータがクエリされます。したがって、ID フィールドをリスト ページから詳細ページのパラメータに渡す最良の方法は、次のように渡すことです。リストをクリックしてオブジェクトの詳細ページに移動します。

要約する

今日学びましょう:

  1. データベースの順序ソート条件による
  2. 拡張ライブラリ WeUI コンポーネント ライブラリを使用する
  3. データベースのクエリ条件
  4. データベーススキップ、リミット、カウントの組み合わせによりページクエリを実現
  5. データベースフィールドは返されるフィールドを指定します

おすすめ

転載: blog.csdn.net/weixin_64051447/article/details/132295519