ミニプログラム開発カスタムコンポーネント

ミニプログラム開発カスタムコンポーネント

Dongguan アプレットは、カスタム コンポーネントを開発し、カスタム コンポーネントを作成し、Object 型のパラメータを受け入れます。生成されたコンポーネント インスタンスには、コンポーネントのメソッド、ライフサイクル関数、プロパティ オブザーバーで this を介してアクセスできます。コンポーネントにはいくつかの共通のプロパティとメソッドが含まれています。プロパティ値の変化はオブザーバーを使用して監視できます。現在、このフィールドは基本ライブラリの新しいバージョンでは推奨されていません。代わりに、より強力でパフォーマンスに優れた Component コンストラクターの observers フィールドを使用してください。

コンポーネント(オブジェクトオブジェクト)

オブジェクト タイプのパラメータを受け入れるカスタム コンポーネントを作成します。

パラメータ

オブジェクトオブジェクト

定義セグメントタイプ必須?説明する最小バージョン
プロパティオブジェクトマップいいえコンポーネントの外部プロパティは、プロパティ名からプロパティ設定へのマッピング テーブルです。
データ物体いいえコンポーネントの内部データ。コンポーネントテンプレートのレンダリングのプロパティと一緒に使用されます。
観察者物体いいえコンポーネント データ フィールド リスナー。プロパティとデータの変更を監視するために使用されます。データ リスナーを参照してください。 2.6.1
方法物体いいえコンポーネント メソッド (イベント応答関数およびカスタム メソッドを含む)。イベント応答関数の使用については、「コンポーネント間通信とイベント」を参照してください。
行動文字列配列いいえミックスインやトレイトと同様に、コンポーネント間でコードを再利用するためのメカニズムです。動作を参照してください。
作成された関数いいえコンポーネント ライフサイクル関数 - コンポーネント インスタンスが作成された直後に実行されます。この時点では setData を呼び出すことはできないことに注意してください。
添付関数いいえコンポーネントライフサイクル関数 - コンポーネントインスタンスがページノードツリーに入るときに実行されます)
準備ができて関数いいえコンポーネントライフサイクル関数 - コンポーネントレイアウトが完了した後に実行されます)
移動した関数いいえコンポーネントライフサイクル関数 - コンポーネントインスタンスがノードツリー内の別の場所に移動されたときに実行されます)
独立した関数いいえコンポーネントライフサイクル関数 - コンポーネントインスタンスがページノードツリーから削除されたときに実行されます)
関係物体いいえコンポーネント間の関係の定義については、コンポーネント間の関係を参照してください。
外部クラス文字列配列いいえコンポーネントが受け入れる外部スタイルクラスについては、外部スタイルクラスを参照してください。
オプションオブジェクトマップいいえいくつかのオプション(特定のオプション設定は、ドキュメントで関連する機能を紹介するときに関係しますが、現時点ではここには記載されていません)
生涯物体いいえコンポーネントライフサイクル宣言オブジェクト。コンポーネントライフサイクルを参照2.2.3
ページ寿命物体いいえコンポーネントが配置されているページのライフサイクル宣言オブジェクト。コンポーネントライフサイクルを参照してください。 2.2.3
定義フィルター関数いいえカスタムコンポーネント拡張のセグメントフィルターを定義するには、カスタムコンポーネント拡張を参照してください。 2.2.3

生成されたコンポーネント インスタンスには、コンポーネントのメソッド、ライフサイクル関数、プロパティ オブザーバーで this を介してアクセスできます。コンポーネントにはいくつかの共通のプロパティとメソッドが含まれています。

物件名タイプ説明する
コンポーネントのファイルパス
idノードID
データセットノードデータセット
データ物体内部データと属性値を含むコンポーネントデータ
プロパティ物体内部データと属性値を含むコンポーネントデータ(データと一貫性がある)
メソッド名パラメータ説明する最小バージョン
データの設定オブジェクト newDataデータを設定し、ビューレイヤーのレンダリングを実行する
動作を持つオブジェクトの動作コンポーネントに動作があるかどうかを確認します(直接的または間接的に導入されたすべての動作が再帰的にチェックされます)
トリガーイベント文字列名、オブジェクトの詳細、オブジェクトオプショントリガーイベントについては、コンポーネント間の通信とイベントを参照してください。
セレクタクエリを作成するセレクタ選択範囲がこのコンポーネントインスタンス内にあるSelectorQueryオブジェクトを作成します。
インターセクションオブザーバーを作成するこのコンポーネント インスタンスにスコープされたセレクターを持つ IntersectionObserver オブジェクトを作成します。
コンポーネントを選択文字列セレクターセレクターを使用してコンポーネントインスタンスノードを選択し、最初に一致するコンポーネントインスタンスオブジェクトを返します(wx://component-exportの影響を受けます)。
すべてのコンポーネントを選択文字列セレクターセレクターを使用してコンポーネントインスタンスノードを選択し、一致するすべてのコンポーネントインスタンスオブジェクトの配列を返します(wx://component-exportの影響を受けます)。
所有者コンポーネントを選択現在のコンポーネント ノードが配置されているコンポーネント インスタンス (つまり、コンポーネントのリファラー) を選択し、そのコンポーネント インスタンス オブジェクトを返します (wx://component-export の影響を受けます) 2.8.2
関係ノードを取得する文字列リレーションキーこの関係に対応するすべての関連ノードを取得します。コンポーネント間の関係を参照してください。
グループセットデータ関数コールバックコールバックをすぐに実行し、複数の setData によってインターフェイスの描画がトリガーされないようにします (異なるコンポーネントが同時に setData を実行するときにインターフェイスの描画を同期するなど、一部の特別なシナリオでのみ必要になります) 2.4.0
タブバーを取得する現在のページのカスタム タブ バーのコンポーネント インスタンスを返します。詳細については、タブ バーのカスタマイズを参照してください。 2.6.2
ページIDを取得するページ識別子(文字列)を返します。これを使用して、複数のカスタム コンポーネント インスタンスが同じページにあるかどうかを判断できます。 2.7.1
アニメ化する文字列セレクター、配列キーフレーム、数値期間、関数コールバックキーフレームアニメーションを実行します。詳細はアニメーションを参照してください。 2.9.0
クリアアニメーション文字列セレクター、オブジェクトオプション、関数コールバックキーフレームアニメーションをクリアします。詳細はアニメーションを参照してください。 2.9.0

コード例:

開発者ツールで効果をプレビューする

成分({
  行動: [],
  // プロパティ定義(詳細は下記を参照)
  プロパティ:
    myProperty: { // プロパティ名タイプ: String,
      価値: ''
    },
    myProperty2: String // 簡略化された定義方法 },
  data: {}, // プライベートデータ。テンプレートのレンダリングに使用できます。lifetimes: {
    // ライフサイクル関数。これは、添付のメソッド セクションで定義された関数またはメソッド名になります: function () { },
    移動: 関数 () { },
    分離: 関数 () { },
  },
  // ライフサイクル関数。メソッド セクションで定義された関数またはメソッド名になります。 attached: function () { }, // ここでの attached の宣言は、lifetimes フィールドの宣言によって上書きされます。 ready: function() { },
  ページの存続期間: {
    // コンポーネントが配置されているページのライフサイクル関数 show: function () { },
    非表示: 関数 () { },
    サイズ変更: 関数 () { },
  },
  メソッド: {
    onMyButtonTap: 関数(){
      this.setData({
        // プロパティとデータを更新する方法は、ページデータを更新する方法と似ています })
    },
    // 内部メソッドはアンダースコアで始まることを推奨します _myPrivateMethod: function(){
      // ここで data.A[0].B は 'myPrivateData' に設定されます
      this.setData({
        'A[0].B': 'myPrivateData'
      })
    },
    _propertyChange: 関数(newVal, oldVal) {
    }
  }})

注: プロパティ定義セクションでは、プロパティ名はキャメルケース (propertyName) で記述されます。wxml では、プロパティ値を指定するときにハイフンが使用され (component-tag-name property-name="attr value")、データ バインディングに適用するときにキャメルケースが使用されます (attr="")。

プロパティの定義

定義セグメントタイプ必須?説明する最小バージョン
タイプはい物件の種類
オプションタイプ配列いいえ属性のタイプ(複数指定可能) 2.6.5
価値いいえプロパティの初期値
観察者関数いいえプロパティ値が変更されたときのコールバック関数

プロパティ値の変化はオブザーバーを使用して監視できます。現在、このフィールドは基本ライブラリの新しいバージョンでは推奨されていません。代わりに、より強力でパフォーマンスに優れた Component コンストラクターの observers フィールドを使用してください。

コード例:

成分({
  プロパティ:
    最小: {
      タイプ: 数値、
      値: 0
    },
    最小: {
      タイプ: 数値、
      値: 0,
      オブザーバー: 関数(newVal, oldVal) {
        // プロパティ値が変更されたときに実行されます }
    },
    最後のリーフ: {
      // このプロパティは、次の 3 つのタイプのいずれかになります: 数値、文字列、ブール型: 数値、
      オプションタイプ: [文字列、オブジェクト],
      値: 0
    }
  }
})

プロパティの型は、String、Number、Boolean、Object、Array のいずれか、または型制限がないことを示す null になります。

ほとんどの場合、プロパティの正確なタイプを指定するのが最適です。したがって、WXML で属性値をリテラルとして指定する場合、値には次のような正確な型を指定できます。

 <カスタムコンプ最小値="1" 最大値="5" />

このとき、カスタム コンポーネントの対応する属性は Number 型として指定されているため、min と max には "1" と "5" ではなく、1 と 5 が割り当てられます。つまり、次のようになります。

 this.data.min === 1 // 真 this.data.max === 5 // 真

バグとヒント:

  • 内部データとプロパティ値を取得するには this.data を使用しますが、これを直接変更してもインターフェイスに変更は適用されないため、変更するには setData を使用する必要があります。
  • ライフサイクル関数は、コンポーネント メソッドの this を通じてアクセスすることはできません。
  • 属性名はデータで始まらないようにする必要があります。つまり、dataXyz の形式で名前を付けないでください。これは、WXML では、data-xyz="" はコンポーネント属性ではなくノード データセットとして処理されるためです。
  • コンポーネントが定義されて使用される場合、コンポーネントの属性名とデータ フィールドは、(異なる定義セクションに配置されている場合でも) 互いに競合することはできません。
  • 基本ライブラリ 2.0.9 以降では、オブジェクト タイプの属性とデータ フィールドに関数タイプのサブフィールドを含めることができるようになりました。つまり、関数はオブジェクト タイプの属性フィールドを介して渡すことができます。このバージョンより下の基本ライブラリはこの機能をサポートしていません。
  • バグ: スロット内のカスタム コンポーネントは、pageLifetimes で宣言されたページ ライフサイクルをトリガーしません。この問題は 2.5.2 で修正されています。
  • バグ: オブジェクトまたは配列型のプロパティの場合、プロパティ値のサブフィールドがコンポーネント自身の this.setData によって変更されると、プロパティ オブザーバーが引き続きトリガーされ、オブザーバーが受け取る newVal は変更されたサブフィールドの値になり、oldVal は空になり、changedPath にはサブフィールドのフィールド名に関する情報が含まれます。現在は、代わりにオブザーバー定義セグメントを使用することをお勧めします。

<<:  事例分析:ユーザー操作分析レポートを作成するには?

>>:  トラフィック生成とプロモーション: プロモーション前にターゲットユーザーを見つけるにはどうすればよいでしょうか?

推薦する

ヨガ業界-Sogou広告戦略!

近年、中国のヨガ業界全体の市場規模は継続的な成長を維持しています。iResearchのデータによると...

マーケティングと広告界における5つの大きな幻想

過去2年間、マーケティング関係者の危機意識はかつてないほど深刻になり、生き残りをかけたプレッシャーの...

情報フロー配信|コンバージョン入札のコア分析!

コンバージョン入札は情報フロー広告の中核であり、広告効果に最も大きな影響を与える要素の 1 つです。...

スターバックスはどのようにして噂の危機をわずか24時間で解決したのか?

広報活動の最高レベルは、流れに沿って、状況を分析し、流れの方向を見つけ出し、それを後押しすることです...

競争入札プロモーションの入札係数を論理的に分析!

入札促進業務では、さまざまな入札係数を目にすることが多いでしょう。 1 これらの係数は個別に見ると理...

デュレックスの運営モデルの利点は何ですか?

「少し紳士的で、少しいたずらっ子で、ナイ​​トクラブの紳士のように、人生を知り、楽しみ方を知ってい...

文昌塔の意味は何ですか?文昌塔の機能は何ですか?

文昌塔は学業の成功を促進します。多くの顧客は、子供たちの学業の成功を助けるために自宅に文昌塔を置くこ...

多くの場所では、健康コードの代わりに紙の健康証明書を使用しています。紙の健康証明書を発行するにはどうすればよいですか?

多くの場所では、健康コードの代わりに紙の健康証明書を使用しています。紙の健康証明書を発行するにはどう...

2021年の最新のBaiduプロモーションとトラフィック転換スキル、数分で習得できます

私たちは常にトラフィックがインターネットプロジェクトの核心であると言ってきました。大企業や大企業でさ...

個人ウェブサイトにとって、広告は本当に唯一の収益モデルなのでしょうか?

先週、私は「Baidu の 1 ページ目のランキングを獲得した方法」というタイトルの記事を Lu S...

百度「闘小電」広告戦略

二級電子商取引のチャネルに関しては、 ByteDanceのLuban(現在のQianchuan)、B...

【健康と理学療法】五行経絡ヨガ指導6回

【健康と理学療法】五行経絡ヨガ指導、全6回。リソース紹介:コースカタログ五行経絡ヨガを理解する.mp...

広告チャネルのコスト、最適化、テクニック!

広告に関しては、参考までにいくつかの経験談をシェアさせていただきました。今日はいくつかのポイントを皆...

ユーザー操作: ユーザーはどのように選択を行うのでしょうか?

人々がどのように選択するかは非常に複雑な問題です。しかし、注意する価値のある 5 つの要素があります...