どうやってWeChatウィジェットページ間の通信を難しくしないか?
3835 ワード
一つの始まり
プログラム開発者はいつも各ページの間の通信問題に出会います。実現方法も様々です。例えば…
シーンの復元
まず、これは電気商の小さいプログラムです。
このような要求があります。トップページのあるところにショッピングカートの商品数を展示します。 他のページで商品を追加購入した時、トップページの数が更新されました。 実装
方式一:onShow直接要求インターフェース
方式二:global Data保存ショッピングカー数、onshow中に更新する
方法4:イベント購読とリリース
上記のいくつかの方法の中で最適な解決策は方法四です。イベントの購読と発表を利用して、論理的に明確で互換性が良いです。しかし、避けられない不足は、買い物の数を動的に表示するページごとに同じ論理コードを追加する必要があります。
状態管理方案
1ページのアプリケーションで最もよく使われるのはコンポーネント間の通信であり、これによって異なる状態の記憶方式が生まれた。react用redux、vue用vuex。彼らの考え方は似ています。すべての管理状態がコアストアに記憶されています。
では、他のフレームでも大丈夫です。プログラムでも大丈夫です。reduxを例にとって、簡単な状態管理方案を実現する。
wxduxの実現
使用前提:redux基礎があります。
wxduxは、reduxと同様に、トリガの挙動をactionで記述し、reducerはstateの変化を記述する。
1.ウィジェットの入り口に登録する
storeを登録してglobalDataに追加します。
書き方はreduxに似ています。機能も似ています。
connect方法は、ウィジェットページのインスタンスをwxduxに接続します。USeStateメソッドを提供しなければなりません。この方法は、stateを受信し、ページに必要なstateを返します。
dispatch方法を使用して、この方法はオブジェクトをパラメータとして受信し、オブジェクトはtypeフィールドがactionのタイプを表している必要があり、wxduxはこのactionによってstateを更新し、nameを使ったすべてのビューを更新する。
以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に対して一定の参考学習価値を持ってほしいです。ありがとうございます。
プログラム開発者はいつも各ページの間の通信問題に出会います。実現方法も様々です。例えば…
シーンの復元
まず、これは電気商の小さいプログラムです。
このような要求があります。
方式一:onShow直接要求インターフェース
Page({
onShow() {
// ...
//
this.requestCartNum();
}
})
不足:毎回onshowはインターフェースを求めて、資源を浪費します。方式二:global Data保存ショッピングカー数、onshow中に更新する
// .js
Page({
onShow() {
// globalData
let num = globalData.cartNum;
if (num !== this.data.cartNum) {
this.setData({
cartNum: num,
});
}
}
});
// .js
Page({
// globalData
cartAdd(num) {
globalData.cartNum = globalData.cartNum + num;
}
})
方式3:追加購入後、トップページのインスタンスを取得し、トップページのメソッドを呼び出します。
// .js
Page({
onCartAdd(num) {
this.setData({
cartNum: this.data.cartNum + num,
});
},
});
// .js
Page({
onCartAdd(num) {
// , onCartAdd
let pages = getCurrentPages();
let curPage = pages[0];
curPage.onCartAdd(num);
}
})
足りません:トップページの実例を正確に入手できるかどうかは分かりません。他のページに変えると多重化しにくいです。方法4:イベント購読とリリース
// .js
Page({
onLoad() {
//
this.$bus.on('cart_add', (num) => {
this.setData({
cartNum: this.data.cartNum + num,
})
})
}
})
// .js
Page({
// cart_add
onCartAdd(num) {
this.$bus.emit('cart_add', num);
}
})
この方法はイベントシステムで、リリースモードで行う処理を購読します。上記のいくつかの方法の中で最適な解決策は方法四です。イベントの購読と発表を利用して、論理的に明確で互換性が良いです。しかし、避けられない不足は、買い物の数を動的に表示するページごとに同じ論理コードを追加する必要があります。
状態管理方案
1ページのアプリケーションで最もよく使われるのはコンポーネント間の通信であり、これによって異なる状態の記憶方式が生まれた。react用redux、vue用vuex。彼らの考え方は似ています。すべての管理状態がコアストアに記憶されています。
では、他のフレームでも大丈夫です。プログラムでも大丈夫です。reduxを例にとって、簡単な状態管理方案を実現する。
wxduxの実現
使用前提:redux基礎があります。
wxduxは、reduxと同様に、トリガの挙動をactionで記述し、reducerはstateの変化を記述する。
1.ウィジェットの入り口に登録する
storeを登録してglobalDataに追加します。
import {createStore} from './wxdux/index';
import reducer from './reducer';
const store = createStore(reducer);
App({
globalData: {
store,
},
});
2.reducer実現書き方はreduxに似ています。機能も似ています。
const userReducer = (state = {}, action) => {
// ...
}
const postReducer = (state = [], action) => {
// ...
};
const reducers = {
user: userReducer,
posts: postReducer,
};
export default reducers;
3.ページでwxduxを使用するconnect方法は、ウィジェットページのインスタンスをwxduxに接続します。USeStateメソッドを提供しなければなりません。この方法は、stateを受信し、ページに必要なstateを返します。
import {connect} from './wxdux/index';
Page(connect({
data: {
sex: ' ',
},
onLoad() {
// ...
},
$useState(state) {
return {
name: state.name,
},
},
}))
4.wxmlにnameを使う
<view>{{name}}</view>
5.トリガstore更新dispatch方法を使用して、この方法はオブジェクトをパラメータとして受信し、オブジェクトはtypeフィールドがactionのタイプを表している必要があり、wxduxはこのactionによってstateを更新し、nameを使ったすべてのビューを更新する。
import {dispatch} from './wxdux/index';
Page(connect({
// , “ ”
onClick() {
const updateName = {
type: 'update_name',
name: ' '
};
dispatch(updateName);
}
}))
締め括りをつける以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に対して一定の参考学習価値を持ってほしいです。ありがとうございます。