記事ディレクトリ
- 1. 今日の目標
- 2.npmの使用
- 3. グローバルなデータ共有
- 3.1 グローバルデータ共有とは何ですか
- 3.2 アプレットにおけるグローバルデータ共有スキーム
- 3.3 Mobx 関連パッケージのインストールとビルド
- 3.4 Storeインスタンスオブジェクトの作成
- 質問
- 3.5 計算されたプロパティの定義
- 質問
- 3.6 アクションメソッドの定義
- 質問
- 3.7 ストア内のメンバーをページにバインドする実装アイデア
- 質問
- 3.8 ストア内のメンバーをページにバインドする
- 3.9 ページ内でのストアメンバーの使用
- 3.10 Storeのメンバーをコンポーネントにバインドする実装アイデアを理解する
- 質問
- 3.11 ストア内のメンバーをコンポーネントにバインドする
- 3.12 コンポーネントでの Store メンバーの使用
- 4. 下請け
- 4.1 下請けの概念と利点を理解する
- 質問
- 4.2 委託前後のプロジェクト構成
- 4.3 サブパッケージのロードルール
- 4.4 下請けの数量制限
- 質問
- 4.5 下請けの構成方法を学ぶ
- 質問
- 4.6 プロジェクト内で下請けを構成する方法をデモンストレーションする
- 4.7 サブコントラクトのエイリアスを設定し、サブコントラクトのボリュームを表示する
- 4.8 梱包原則
- 4.9 引用の原則
- 4.10 独立下請けとは何か、およびそれと共通の下請けとの違いを理解する
- 4.11 独立下請けの適用シナリオを理解する
- 4.12 通常の下請けを独立した下請けに転換する
- 質問
- 4.13 独立下請けの引用原則
- 質問
- 4.14 サブパッケージの事前ダウンロードの概念と利点の紹介
- 4.15 サブパッケージの事前ダウンロードを構成する
- 4.16 サブパッケージの事前ダウンロードの制限事項
1. 今日の目標
vant-weapp
コンポーネントライブラリをインストールおよび構成する方法を知る能力- を使用してグローバル データ共有
MobX
を実装する API
小さなプログラムをPromise
最適化する方法を知ることができるtabBar
カスタムエフェクトを実現する方法を知る能力
2.npmの使用
2.1 ミニ プログラムの npm のサポートと制限
質問
-
ミニ プログラムに npm パッケージを使用する場合の制限は何ですか?
現在、ミニ プログラムは、ミニ プログラムの開発効率を向上させるために、サードパーティ パッケージをインストールするための npm の使用をすでにサポートしています。ただし、アプレットで npm パッケージを使用するには、次の 3 つの制限があります。
- Node.js 組み込みライブラリに依存するパッケージはサポートされていません
- ブラウザの組み込みオブジェクトに依存するパッケージはサポートされていません
- C++ プラグインに依存するパッケージはサポートされていません
概要: npm には数千万のパッケージがありますが、小規模なプログラムで使用できるパッケージは「ほとんどありません」
2.2 vant Weapp とは何かを理解する
Vant
Youzan のフロントエンド チームによるオープンソースのモバイル コンポーネント ライブラリで、2016 年に公開され、4 年間維持されています。Vant
Youzan のすべてのコア ビジネスを社内で担い、社外では 100,000 人を超える開発者にサービスを提供しており、業界で主流のモバイル コンポーネント ライブラリの 1 つです。MIT
オープンソースライセンス契約を採用し、より商用利用しやすくなりました- 以下のアプレットの QR コードをスキャンして、サンプル コンポーネント ライブラリを体験してください
QR コードはここには投稿できません。Baidu で検索できます。
2.3 Vant コンポーネント ライブラリのインストール
質問
-
Vant コンポーネント ライブラリをインストールするにはどうすればよいですか?
アプレット プロジェクトでは、Vant コンポーネント ライブラリのインストールは主に次の手順に分かれています
-
npm
インストールすることでnpm init -y
npm i @vant/[email protected] -S --production
--production を使用すると、依存関係のみがインストールされ、devDependences はインストールされません。
-
ビルド
npm
パッケージ関数微信开发者工具
-->详情
-->本地设置
-->をクリックすることをお勧めします。使用 npm 模块
- 次に、
微信开发者工具
-->菜单栏
-->工具
-->をクリックします。构建npm
- プロンプトが表示され
构建成功,耗时 xxx 秒
、コンソールにエラーが表示されない場合は、パッケージが正常にビルドされ、使用できることを意味します。- それ以外の場合は、削除する必要
node_modules
がありますminiprogram_npm
- 削除した後、パッケージを再インストールし、
工具
[->]をクリックして构建npm
再構築します。
- それ以外の場合は、削除する必要
-
改訂
app.json
- 防止のため削除させて
styles: v2
いただき小程序本身的 UI 样式和 Vant 的组件样式库 冲突
- 防止のため削除させて
詳細な操作アドレス: vant のインストール
2.4 Vant コンポーネントの使用
質問
- Vant コンポーネント ライブラリを使用するにはどうすればよいですか?
Vant
コンポーネントライブラリをインストールした後、必要なコンポーネントをapp.json
のusingComponents
ノードに導入し、wxml
コンポーネントを直接使用できます。
"usingComponents": {
"van-button": "@vant/weapp/button/index"
}
<van-button type="default">默认按钮</van-button>
<van-button type="primary">主要按钮</van-button>
<van-button type="info">信息按钮</van-button>
<van-button type="warning">警告按钮</van-button>
<van-button type="danger">危险按钮</van-button>
2.5 CSS 変数の定義と使用
質問
- CSS変数の使い方は?
- CSS変数のスコープはどこまでですか?
Vant Weapp
CSS
変数を使用してカスタム テーマを実装します。CSS
変数の基本的な使用法については、MDN
ドキュメントを参照してください。
https://developer.mozilla.org/zh-CN/docs/Web/CSS/Using_CSS_custom_propertiesopen
2.6 CSS 変数を使用して Vant のテーマ スタイルをカスタマイズする
質問
- Vant のスタイルをカスタマイズするにはどうすればよいですか?
app.wxss
に、CSS
グローバルに有効になる変数を記述します。
利用可能なすべてのカラー バリエーションについては、Vant が提供する公式構成ファイルを参照してください。
https://github.com/youzan/vant-weapp/blob/dev/packages/common/style/var.less
2.7 ミニプログラムAPIの約束とは
- コールバックベースの非同期
API
の 欠点- Mini Programs が公式に提供する非同期 API は、デフォルトではコールバック関数に基づいて実装されており、たとえばネットワーク リクエストの API は次のように呼び出す必要があります。
- この種のコードの欠点は明らかで、コールバック地獄の問題が発生しやすく、コードの可読性と保守性が低いことです。そして、このタイプのコードを次のように
API Promise
変換したい
API Promise
化学 とは何ですかAPI Promise
変換とは、コードの可読性と保守性を向上させ、コールバック 地獄の問題を回避するために、追加の構成を通じてAPI
公式に提供されているコールバック ベースの非同期をPromise
非同期を指します。API
2.8 miniprogram-api-promise のインストールとビルド
-
アプレットでは、
API Promise
実装は主にminiprogram-api-promise
このサードパーティnpm
パッケージに依存します。npm i --save [email protected]
-
ダウンロードが完了すると、このパッケージを直接使用することはできなくなり、npm パッケージを再度再構築する必要があります。
- ビルドする前に元のファイルを削除することをお勧めします
miniprogram_npm
- 次に、「ツール」、「ビルド」をクリックします
npm
- ビルドする前に元のファイルを削除することをお勧めします
2.9 APIの約束を実現するための3つのステップ
-
アプレット エントリ ファイルで
promisifyAll()
メソッドをimport { promisifyAll } from 'miniprogram-api-promise'
-
定数を空のオブジェクトとして宣言する
const wxp = wx.p = { }
-
呼び出し
promisifyAll()
メソッドpromisifyAll(wx, wxp)
-
上記のコードは何を意味するのでしょうか?
promisifyAll
: 私たちが行うことは、が所有するすべてのプロパティとメソッドをこのwx
ことですcopy
wxp
- ただし、
wxp
これは現在のjs
ファイル、現在のファイル内でのみ使用できます。 - したがって、プロパティ
wx
をp
それが同じ空のオブジェクトwxp
を指すします。 - 他のページまたはコンポーネントでは
wx
、グローバル オブジェクトをクリックすることでp
アクセスできます。wxp
- このとき、非同期リクエスト
wx.p
が開始される、promise
オブジェクトが取得されます - その後、簡略化された構文
async/await
を使用できますPromise
2.10 Promise の後に非同期 API を呼び出す
<van-button type="warning" bindtap="getInfo">警告按钮</van-button>
async getInfo () {
const {
data: res } = await wx.p.request({
url: 'https://www.escook.cn/api/get',
method: 'GET',
data: {
name: 'zs',
age: 19
}
})
console.log(res)
}
3. グローバルなデータ共有
3.1 グローバルデータ共有とは何ですか
全局数据共享
、別名: は、問題を状态管理
解決することです组件之间数据共享
- 開発時に一般的に使用されるグローバル データ共有スキームには、、、
Vuex
などRedux
がMobX
あります。
3.2 アプレットにおけるグローバルデータ共有スキーム
- アプレットでは、
mobx-miniprogram
matesを使用してmobx-miniprogram-bindings
グローバルなデータ共有を実現できます。の:mobx-miniprogram
Store
インスタンスオブジェクトの作成に使用されますmobx-miniprogram-bindings
Store
共有データまたはメソッドをコンポーネントまたはページにバインドして使用するために使用されます
3.3 Mobx 関連パッケージのインストールとビルド
プロジェクトで次のコマンドを実行して、MobX
関連
npm install --save [email protected] [email protected]
注:MobX
関連パッケージをインストールした後、miniprogram_npm
ディレクトリをnpm
3.4 Storeインスタンスオブジェクトの作成
質問
- Storeのインスタンスオブジェクトを作成するにはどうすればよいですか?
- グローバルに共有されるデータを定義するにはどうすればよいですか?
- プロジェクトのルートに
store
フォルダーを、そのフォルダー内にstore.js
ファイルを作成します - ファイル内で
mobx-miniprogram
、Store
インスタンスを作成するパッケージをインポートします。 Store
ウェアハウスの作成、グローバル共有データの宣言、インポート
import {
observable } from 'mobx-miniprogram'
export const store = observable({
numA: 1,
numB: 2
})
3.5 計算されたプロパティの定義
質問
- 計算されたプロパティを定義するにはどうすればよいですか?
- 属性を計算するメソッドの前に、
get
修飾子を。これはsum
、 の値が読み取り専用であり、変更できないことを意味します。 - 計算されたプロパティ
sum
はnumA
とnumB
の値に依存するため、sum
関数の戻り値が最終値になります
import {
observable } from 'mobx-miniprogram'
export const store = observable({
// 数据字段
numA: 1,
numB: 2,
// 计算属性
get sum() {
return this.numA + this.numB
}
})
3.6 アクションメソッドの定義
質問
- グローバル共有データを更新するにはどうすればよいですか?
- インポート
action
機能 action
データの値を変更するためstore
に
import {
observable, action } from 'mobx-miniprogram'
export const store = observable({
// 数据字段
numA: 1,
numB: 2,
// 计算属性
get sum() {
return this.numA + this.numB
},
// actions 方法,用来修改 store 中的数据
updateNumA: action(function (step) {
this.numA += step
}),
updateNumB: action(function (step) {
this.numB += step
})
})
3.7 ストア内のメンバーをページにバインドする実装アイデア
質問
- ページ内ストアを使用するにはどうすればよいですか?
createStoreBindings
方法- パラメータ 1: バインド先: 現在のページ
this
、現在のページのインスタンス オブジェクト - パラメータ 2: オブジェクト {ストア (コンテナ),
fields(数据)
,actions(修改方法)
}- マップコンテナのインスタンス
- コンテナのデータフィールドをマッピングする
- コンテナの変更をマッピングするためのメソッド
- パラメータ 1: バインド先: 現在のページ
- destroyStoreBindings メソッド
createStoreBindings
メソッドの戻り値をクリーンアップして破棄します。
3.8 ストア内のメンバーをページにバインドする
import {
createStoreBindings } from 'mobx-miniprogram-bindings'
import {
store } from '../../store/store'
Page({
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
this.storeBindings = createStoreBindings(this, {
store,
fields: ['numA', 'numB', 'sum'],
actions: ['updateNumA']
})
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
this.storeBindings.destroyStoreBindings()
}
})
3.9 ページ内でのストアメンバーの使用
<view>{
{ numA }} + {
{ numB }} = {
{ sum }}</view>
<van-button type="warning" bindtap="btnHandler1" data-step="{
{ 1 }}">
numA + 1
</van-button>
<van-button type="primary" bindtap="btnHandler1" data-step="{
{ -1 }}">
numA -1
</van-button>
btnHandler1 (e) {
this.updateNumA(e.target.dataset.step)
}
3.10 Storeのメンバーをコンポーネントにバインドする実装アイデアを理解する
質問
- コンポーネントでストアメンバーを使用するにはどうすればよいですか?
3.11 ストア内のメンバーをコンポーネントにバインドする
import {
storeBindingsBehavior } from 'mobx-miniprogram-bindings'
import {
store } from '../../store/store'
Component({
// 通过 storeBindingsBehavior 来实现自动绑定
behaviors: [storeBindingsBehavior],
storeBindings: {
store, // 指定要绑定的 Store
// 指定要绑定的字段数据
fields: {
numA: () => store.numA, // 绑定字段的第 1 种方式
numB: (store) => store.numB, // 绑定数据的第 2 个方式
sum: 'sum' // 绑定数据的第 3 个方式
},
// 指定要绑定的方法
actions: {
updateNumA: 'updateNumA'
}
}
})
3.12 コンポーネントでの Store メンバーの使用
<!--components/numbers/numbers.wxml-->
<view>{
{ numA }} + {
{ numB }} = {
{ sum }}</view>
<van-button type="warning" bindtap="btnHandler1" data-step="{
{ 1 }}">
numA + 1
</van-button>
<van-button type="primary" bindtap="btnHandler1" data-step="{
{ -1 }}">
numA -1
</van-button>
import {
storeBindingsBehavior } from 'mobx-miniprogram-bindings'
import {
store } from '../../store/store'
Component({
// 通过 storeBindingsBehavior 来实现自动绑定
behaviors: [storeBindingsBehavior],
storeBindings: {
store, // 指定要绑定的 Store
// 指定要绑定的字段数据
fields: {
numA: () => store.numA, // 绑定字段的第 1 种方式
numB: (store) => store.numB, // 绑定数据的第 2 个方式
sum: 'sum' // 绑定数据的第 3 个方式
},
// 指定要绑定的方法
actions: {
updateNumA: 'updateNumA'
}
},
/**
* 组件的方法列表
*/
methods: {
btnHandler1 (e) {
this.updateNumA(e.target.dataset.step)
}
}
})
4. 下請け
4.1 下請けの概念と利点を理解する
質問
- 下請けとは何ですか? メリットは何ですか?
-
下請けとは何ですか
サブパッケージとは、構築時に
完整的小程序项目
要件に応じて1 つの パッケージを別のサブパッケージにパッケージ化することを指します。划分为不同的子包
按需进行加载
-
下請けのメリット
- アプレットの初回起動時のダウンロード時間を最適化できます。
- 複数のチームが一緒に開発する場合の分離とコラボレーションの向上
4.2 委託前後のプロジェクト構成
-
委託前のプロジェクトの構成
下請け前
所有的页面
とパッケージ化されるため、アプレット资源
全体が影響を受ける项目体积过大
首次启动的下载时间
-
委託後のプロジェクト構成
- 下請け後のアプレット プロジェクトは
1 个主包
+で構成されます多个分包
。主包
: 通常项目的启动页面
、 またはTabBar 页面
、および使用する必要がある一部のサブパッケージのみが含まれます公共资源
分包
: 現在のサブパッケージに関連するページとプライベート リソースのみが含まれます
- 下請け後のアプレット プロジェクトは
4.3 サブパッケージのロードルール
- アプレットが起動すると、デフォルトでダウンロードされます
主包并启动主包内页面
- tabBar ページはメイン パッケージに配置する必要があります
- ユーザーがサブパッケージ内のページを入力し、
客户端会把对应分包下载下来
ダウンロードの完了後にそのページを表示すると- tabBar 以外のページは、さまざまな機能に応じてさまざまなサブパッケージに分割し、オンデマンドでダウンロードできます。
4.4 下請けの数量制限
質問
- サブパッケージの容量の制限はどれくらいですか?
- 現在、ミニ プログラムのサブパッケージのサイズには 2 つの制限があります。
- アプレット全体のすべてのサブパッケージのサイズは 16M (メイン パッケージ + すべてのサブパッケージ) を超えません。
- 1 つのサブパッケージ/メイン パッケージのサイズは 2M を超えることはできません
4.5 下請けの構成方法を学ぶ
質問
- 下請けに出す前にどのように設定すればよいですか?
- プロジェクトのディレクトリを変更する
app.json
のsubpackages
ノードでパッケージ化された構造体を宣言します。
4.6 プロジェクト内で下請けを構成する方法をデモンストレーションする
- サブパッケージが設定されると、対応するディレクトリがデフォルトで生成されます。
{
"pages": [
"pages/home/home",
"pages/message/message",
"pages/contact/contact",
"pages/shoplist/shoplist"
],
"subPackages": [
{
"root": "pkgA",
"pages": [
"pages/cat/cat",
"pages/dog/dog"
]
},
{
"root": "pkgB",
"pages": [
"pages/apple/apple"
]
}
]
"sitemapLocation": "sitemap.json"
}
4.7 サブコントラクトのエイリアスを設定し、サブコントラクトのボリュームを表示する
- 各サブパッケージに
name
属性をエイリアスを設定します 微信开发者工具 --> 基本信息 --> 本地代码
下請けの量を確認できます。
{
"pages": [
"pages/home/home",
"pages/message/message",
"pages/contact/contact",
"pages/shoplist/shoplist"
],
"subPackages": [
{
"root": "pkgA",
"name": "A",
"pages": [
"pages/cat/cat",
"pages/dog/dog"
]
},
{
"root": "pkgB",
"name": "B",
"pages": [
"pages/apple/apple"
]
}
]
"sitemapLocation": "sitemap.json"
}
4.8 梱包原則
- アプレットは設定
subpackages
に従って、subpackages
他のディレクトリはメイン パッケージにパッケージ化されます。 - メインパッケージには独自の
pages
(つまり、最も外側のpages
フィールド) を持つこともできます。 tabBar
ページはメイン パッケージ内にある必要があります- サブパッケージを相互にネストすることはできません
4.9 引用の原則
- メインパッケージはサブパッケージ内のプライベートリソースを参照できません
- サブパッケージ間でプライベート リソースを参照することはできません
- サブパッケージはメインパッケージ内のパブリックリソースを参照できます
4.10 独立下請けとは何か、およびそれと共通の下請けとの違いを理解する
- 独立下請けとは
- 独立したサブパッケージは本質的にはサブパッケージですが、特別であり、メイン パッケージや他のサブパッケージから独立して実行できます。
- 単独下請けと一般下請けの違い
- 主な違い:
是否依赖于主包才能运行
- 通常のサブパッケージは実行するメイン パッケージに依存する必要があります
- 独立したサブパッケージは、メイン パッケージをダウンロードせずに独立して実行できます。
- 主な違い:
4.11 独立下請けの適用シナリオを理解する
- 開発者は、必要に応じて、機能的に独立した特定のページを独立したサブパッケージに構成できます。その理由は次のとおりです
- アプレットが通常のサブパッケージ ページから起動される場合、最初にメイン パッケージをダウンロードする必要があります
- 独立したサブパッケージはメインパッケージに依存せずに実行できるため、サブパッケージページの起動速度が大幅に向上します。
- 注: 小さなプログラムには複数の独立したサブパッケージが存在する場合があります。
4.12 通常の下請けを独立した下請けに転換する
質問
- 独立した下請けを構成するにはどうすればよいですか?
- 通常のサブコントラクトと独立したサブコントラクトの違いは、この属性が
subpackages
配列に設定されているかどうかです。independent
- 通常のサブパッケージと比較して、独立サブパッケージは、サブパッケージ配列の要素に独立を true として設定します。
4.13 独立下請けの引用原則
質問
- 独立したサブパッケージ参照の制限は何ですか?
- 独立したサブパッケージ、共通のサブパッケージとメイン パッケージの間では、はい
相互隔绝
、不能相互引用彼此的资源
! 例えば:- メインパッケージ
无法引用
の独立したサブパッケージ内のプライベートリソース - 独立した下請け業者間、
不能相互引用
民間リソース - 独立した下請けと共通の下請け間の
不能相互引用
プライベートリソース 特别注意:
メインパッケージ内のパブリックリソースは、独立したサブパッケージでは参照できません
- メインパッケージ
4.14 サブパッケージの事前ダウンロードの概念と利点の紹介
- サブパッケージの事前ダウンロードとは何ですか
- サブパッケージの事前ダウンロードとは、アプレットの特定のページに入るときに、
由框架自动预下载可能需要的分包
後続のサブパッケージ ページに入るときの起動速度を向上させることを意味します。
- サブパッケージの事前ダウンロードとは、アプレットの特定のページに入るときに、
- サブパッケージの事前ダウンロードの利点
- 後続のサブパッケージ ページに入るときの起動速度を向上させます。
4.15 サブパッケージの事前ダウンロードを構成する
- サブパッケージの事前ダウンロードの動作は、指定されたページに入るときにトリガーされます。
app.json
では、preloadRule
ノードを使用してサブパッケージの事前ダウンロード ルールを定義します。
// 分包预下载的规则
"preloadRule": {
// 触发分包预下载的页面路径
"pages/contact/contact": {
// network 表示在指定的网络模式下进行预下载
// 可选值有: all(不限网络)和wifi(仅 wifi 模式下进行预下载)
// 默认值为: wifi
"network": "all",
// packages 表示进入页面后, 预下载哪些分包
// 可以通过root 或name 指定预下载哪些分包
"packages": [
"pkgA"
]
}
}
4.16 サブパッケージの事前ダウンロードの制限事項
- 同じサブパッケージ内のページは、共通の事前ダウンロード サイズ クォータを共有します。
2M