redux weapp
1.0.0
Wechat アプレット (微信小程序、weapp) 用の Redux ベースの状態管理。Redux ストアを Weapp のアプリまたはページのライフサイクルに接続します。
# via Github
npm install xixilive/redux-weapp --save-dev
# via npm
npm install redux-weapp --save-dev
# via yarn
yarn add -D redux-weapp
git clone https://github.com/xixilive/redux-weapp.git
&& cd redux-weapp
&& yarn
&& yarn build
これらのデモ コード スニペットを試す前に、weapp モジュール化開発の経験がある必要があります。 微信小程序模块化开発行实練習
// Redux store
import { createStore } from 'redux'
//create your Redux store
const store = createStore ( ... )
import connect from 'redux-weapp'
const config = connect . App (
store ,
//to map next state into your app
( state ) => {
// must return an object, which will be passed to onStateChange function
return { }
} ,
// to bind dispatch with your action,
// and this binding will be injected into your app object.
( dispatch ) => {
// return an object, which can be invoked within app context(this scope).
return { }
}
) ( {
onLaunch ( options ) { } ,
//...,
onStateChange ( nextState , prevState , initFlag ) {
this . setData ( { ... this . data , ... nextState } )
}
} )
// construct your app
App ( config )
次のような店舗形状があると仮定します。
{
"todos" : [
{
"title" : " String " ,
"complete" : " Boolean "
}
]
}
そしてアクションクリエーター(FSA)を次のように定義しました:
const fetchTodosAction = ( status ) => ( { type : 'FETCH_TODOS' , filter : { status } } )
OK、ストアを todo リスト ページに接続しましょう。
//
import connect from 'redux-weapp'
const config = connect . Page (
store ,
//to map next-state into your page
( state ) => ( { todos : state . todos } ) ,
// to bind dispatch with your action creators,
// and this binding will be injected into your page object
( dispatch ) => ( {
fetchTodos ( status = 'inprogress' ) {
// dispatch an action
dispatch ( fetchTodosAction ( status ) )
}
} )
) ( {
onLoad ( options ) {
this . fetchTodos ( 'inprogress' )
} ,
onStateChange ( nextState , prevState , initFlag ) {
const { todos } = nextState
this . setData ( { todos } ) // to update UI
} ,
// view interactions
onTapCompleteTab ( ) {
this . fetchTodos ( 'complete' )
} ,
onTapInProgressTab ( ) {
this . fetchTodos ( 'inprogress' )
}
} )
// construct your page
Page ( config )
//define app connect function
factory = connect . App (
store : ReduxStore ,
mapStateToProps : Function ( state : Object ) ,
mapDispatchToProps : Function ( dispatch : Function )
) : Function
//build a store-binding app config object
config = factory ( {
onLaunch ( options : Object ) { } ,
onStateChange ( nextState : Object , prevState : Object , initFlag : Any ) ,
//...
} ) : Object
//launch app with store-binding config
App ( config )
//define page connect function
factory = connect . Page (
store : ReduxStore ,
mapStateToProps : Function ( state : Object ) ,
mapDispatchToProps : Function ( dispatch : Function )
) : Function
//build a store-binding page config object
config = factory ( {
onLoad ( options : Object ) { } ,
onStateChange ( nextState : Object , prevState : Object , initFlag : Any )
//...
} ) : Object
//start page instance with store-binding config
Page ( config )
onStateChange
関数 // would be called after each concerned state changed
onStateChange ( nextState : Object , prevState : Object , initFlag : Any ) : void
initFlag
: [email protected]
からの新機能。詳細については、「変更点」セクションを参照してください。 connect.App
APImapState
関数からappLaunchOptions
引数を削除しました。 // v0.1.x
connect . App ( {
store : ReduxStore ,
mapState : Function ( state : Object , appLaunchOptions : Object ) : Object ,
mapDispatch : Function ( dispatch : Function ) : Object ,
} )
// v0.2.x
connect . App ( {
store : ReduxStore ,
mapState : Function ( state : Object ) : Object ,
mapDispatch : Function ( dispatch : Function ) : Object ,
} )
connect.Page
APImapState
関数からpageLoadOptions
引数を削除しました。 // v0.1.x
connect . Page ( {
store : ReduxStore ,
mapState : Function ( state : Object , pageLoadOptions : Object ) : Object ,
mapDispatch : Function ( dispatch : Function ) : Object ,
} )
// v0.2.x
connect . Page ( {
store : ReduxStore ,
mapState : Function ( state : Object ) : Object ,
mapDispatch : Function ( dispatch : Function ) : Object ,
} )
onStateChange
コールバックinitFlag
3 番目の引数として追加します。これは、最初のディスパッチ時のみ文字列値INIT_SYNC
にすることができます。それ以外の場合はundefined
。 // v0.1.x
onStateChange ( nextState : Object , prevState : Object )
// v0.2.x
onStateChange ( nextState : Object , prevState : Object , initFlag : Any )
onLaunch
onLaunch
関数が呼び出されたときにサブスクライブ リスナーをセットアップすると、ストアの初期状態がブロードキャストされます。
onShow
非アクティブなリスナーは、 onShow
関数が呼び出されたときにactive
に設定され、リスナーは最後の状態で呼び出されます。
onHide
onHide
関数が呼び出された場合、アクティブなリスナーはinactive
に設定されます。
onLoad
onLoad
関数が呼び出されたときにサブスクライブ リスナーをセットアップすると、ストアの初期状態がブロードキャストされます。
onShow
非アクティブなリスナーは、 onShow
関数が呼び出されたときにactive
に設定され、リスナーは最後の状態で呼び出されます。
onHide
onHide
関数が呼び出された場合、アクティブなリスナーはinactive
に設定されます。
onUnload
onUnload
関数が呼び出されると、リスナーは削除されます。
幸運を!