ドロップダウンフィールドとテキストフィールドを持つreduxフォームがあります。ドロップダウンの変更時に、他のフィールドを更新する必要があります。他のフィールドはカスタムコンポーネントの例を使用しています
だから構造は似ています。 1.フォームを持つコンポーネント2.フィールドコンポーネント。
今、私はグーグルで検索し、フィールドを更新するためのいくつかのことを見つけましたが、それを行うことはできません。試したこと1.以下のような値をフィールドに状態を追加します。動作しません。
<Field name="accountno" value="this.state.accountno" component={InputText} placeholder="Number" />
ディスパッチを試みましたが、使用できませんでした。プロペラタイプがディスパッチされていない場合のエラーの取得
this.props.dispatch(change( 'form'、 'accountno'、 'test value'));
This.props.fieldsを試しましたが、propsタイプのフィールドは試しませんでした。
2または3を使用して動作するはずですが、それらを追加する場所を見つけることができません。これらまたは他の方法を使用する方法を教えてください。
redux-form
を使用する場合、値をフィールドに直接設定する必要はありません。メソッドinitialize
を使用してフォームに入力できます。または、initialValues
をredux
に渡すオブジェクトのプロパティとして使用して、状態を小道具にマッピングします。他の方法は、redux-form
から関数change
を使用して値を個別に設定することです。動作させるには、react-redux
のconnect
でコンポーネントをラップする必要があります。 dispatch
メソッドを小道具に埋め込みます。
import React, { Component } from 'react';
import { reduxForm, Field, change } from 'redux-form';
import { connect } from 'react-redux';
class Form extends Component {
componentDidMount() {
this.props.initialize({ accountno: 'some value here' });
// set the value individually
this.props.dispatch(change('myFormName', 'anotherField', 'value'));
}
render() {
return (
<form onSubmit={...}>
...
<Field name="accountno" component={InputText} placeholder="Number" />
<Field name="anotherField" component={InputText} />
</form>
)
}
}
Form = reduxForm({
form: 'myFormName'
})(Form);
export default connect(state => ({
// alternatively, you can set initial values here...
initialValues: {
accountno: 'some value here'
}
}))(Form);
この問題にも思いつきました。解決策は、juliobettaの答えのようにinitialValues
を使用することですが、重要なのは、値をstate.blah
などの変数に設定することです。
次に、状態が変更されたときにフィールドが更新されるように、 enableReinitialize
をtrue
に設定 する必要があります。
export default connect(state => ({
initialValues: {
accountno: state.accountno,
},
enableReinitialize: true,
}))(Form);
これで、state.accountno
を変更するたびに、フォームフィールドが更新されます。