私は前にmobx-react-form
を使用していませんが、mobx
とreact
を広く使用しています。これを行うにはいくつかの方法があります。私がやったやり方は次の通りです.Webpackを仮定してください。& ES6 &ここではReact 14です。ストアをインスタンス化し、フォームをホストするコンポーネントの周囲にProvider
を使用します。
import { Provider } from 'mobx-react'
import React, { Component, PropTypes } from 'react'
import AuthStore from '{your auth store rel path}'
import FormComponent from '{your form component rel path}'
// instantiate store
const myAuthStore = new AuthStore()
// i don't think the constructor for AuthStore needs a store arg.
export default class SingleFormApplication extends Component {
render() {
return (
<Provider store={myAuthStore} >
<FormComponent />
</Provider>
)
}
}
あなたFormComponent
クラスは両方が小道具としてストアオブジェクトを注入し、上のリスナーを登録し、より高次のコンポーネントでそれをラップしますmobx-react
パッケージの両方observer
とinject
メソッドを利用する必要があります。コンポーネントを再レンダリングする変更を格納します。私は通常、注釈の構文を使用し、これはこのように見えます。
@inject('{name of provider store prop to inject}') @observer
export default class Example extends Component {
constructor(props) {
super(props)
this.store = this.props.store
}
}
最後に、注入された店で、あなたは今、私はあなたがそれに応じて変更助言AuthForm
方法、にストアからアクションを渡すことができます。 AuthForm
ファイルに、onSuccess
メソッドを引数として取り込み、mobx-react-form
オブジェクトを返すメソッドをエクスポートします。また、フォーム全体ではなく、電子メールとパスワードを単に引数として使用するようにストアアクションを変更します。その後、あなたにあなたが同じようにフォームをレンダリングするためにthis.form
クラス変数を使用FormComponent
方法をレンダリング... this.store = this.props.store
割り当てた後、コンストラクタで、その後
this.form = formWithSuccessAction(this.store.authLogin)
を
import { formWithSuccessAction } from '{rel path to auth form}'
:FormComponent
でこれを試しますmobx-react-form
ドキュメント
const formWithSuccessAction = (storeSuccessAction) => {
const fields = [
formFields.email,
formFields.password
];
const hooks = {
onSuccess(form) {
// Here i want to use an action - authLogin from my AuthStore
console.log('Form Values!', form.values());
// get email and password in separate vars or not, up to you
storeSuccessAction(email, password)
},
onError(form) {
console.log('All form errors', form.errors());
}
};
const AuthForm = new MobxReactForm({fields}, {plugins:formValidation,
hooks});
return AuthForm
}
うまくいけば、これはあなたの方法であなたを支援します。
できるだけ明確にするため、AuthForm.formWithSuccessAction
方法は次のようになります。
wow !!!大変感謝しています –