前書き
Advent Calendar 2018の21日目の記事です
Redux Form
についてです。
Redux Formを使ってみて情報見つけるのに苦労したので
自分の備忘録の意味も込めて残しました。
package.json
はこんな感じでやりました。最新版では確認してません。
"react-redux-form": "^1.14.0",
"redux-form-material-ui": "^4.3.0",
Material-UIでのフォームはこのドキュメントのコンポーネントを参照するのがいいです。
準備
まずインポート
import { change } from 'redux-form';
こうすれば後のバリデーションやフィールド内の変更時に対応できる。
return {
validate: validate,
onChange: onChange,
}
バリデーション
先ほどのvalidate: validate,
の部分の設定でリンクされてます。
こうすればrequiredFields
にある
const validate = values => {
const errors = {};
const requiredFields = [
'hoge',
'bar'
];
requiredFields.forEach(field => {
if (!values[field]) {
errors[field] = field + 'が未入力です。';
}
});
return errors;
}
form
のボタンを押下した時にバリデーション
this.props
にhandleSubmit
にある。
const { handleSubmit } = this.props;
return (
<form style={wellStyles}>
// 省略〜〜〜
<RaisedButton
type="button"
label="ボタンだぜ"
primary={true}
onClick={handleSubmit(() => this.hoge())}
/>
</form>
);
handleSubmit
からリンクされた
hoge()
メソッドの返り値がtrue
かfalse
かでフォームを可能かどうかを決定させることができる。
フォーム変更時にフォーム内を動的にテキスト入れたりするには?
先ほどのonChange: onChange,
からリンクされてます
hogeForm
と言うのは自分でつけたformの名前です。
こんな感じならhoge
と言うフィールドに変化があった時にだけ、'bar'
と言う文字列を無理やり入れたりできます。
const onChange = (values, dispatch, _, previousValues) => {
if (values['hoge'] !== previousValues['hoge']) {
dispatch(change('hogeForm', 'hoge', 'bar'));
}
}
細かい部分は色々端折りましたが、
参考になればと思います。