2016-08-19 21 views
3

redux-form 6.0.0-rc.5を使用しています。ユーザが入力したフォーム値を表示しようとしています。redux-form:別のコンポーネントにフォーム値を表示する方法

しかし、これらの値をreduxフォーム自体ではなく、別のコンポーネントから表示したいとします。

だから、私の単純化されたアプリケーション・アーキテクチャは、そのようになります:

<App />    -> (main component -container ?-) 
    <List />   -> (connect to form values and pass them down) 
    <Elem />   -> (display form value) 
    <Form />   -> (enter form values) 

コンポーネントはReduxの形式は「形」に搭載され、働いています。 (状態form.formName.valuesから)フォームの値を得るための良い方法と私のディスプレイのコンポーネントに送信します何

Form = reduxForm({ 
    form: 'formName' 
})(Form) 

?私が試してみました

もの:

  • 接続のApp店とmapStateToProps(form.formName.values)に続い小道具として表示するためにそれを渡します。しかし、ユーザーが何かを入力するまで、フォームの状態で値が存在しないので、エラーをスローします。

    const Elem = ({ name }) => (
        <li>{name}</li> 
    ) 
    

Elemの:リストコンポーネント内Reduxの形式により提供getFormValues( 'formNameフォーム')関数を使用して、それが機能または未定義を返す

  • リスト

    const List = ({ values }) => (
        {values.map(value => <Elem name={value.name} />)}  
    ) 
    
    List = connect(
        state => ({ 
        values: getFormValues('formName') 
        }) 
    )(List) 
    

    私は行方不明のものがあるか、またはそれがredux-formかreduxかにかかわらず、私はまだ正しく理解していません...私は誰かが私を啓発できることを願っています!

    ありがとうございました。

  • 答えて

    5

    ではなく

    List = connect(
        state => ({ 
        values: getFormValues(state.form.formName) 
        }) 
    )(List) 
    

    を使用してみてください。少なくともそれはv5でどのように働いたのですか。方法はgetValuesであり、getFormValuesではありませんでした。

    編集: それはあなたがformValueSelectorを使用する必要がありますV6に思えるのドキュメントを簡単に見た後:http://redux-form.com/6.0.0-rc.3/examples/selectingFormValues/

    +3

    はい。 'formValueSelector'が答えです。 –

    +0

    あなたの答えをありがとう。私は、フォームの値を選択するのを見ましたが、私のドキュメントの理解は次のとおりです。getFormValues関数は、アプリケーション内の任意の場所(タブの「セレクタ」)のすべての値を素早く取得する方法です。また、formValueSelectorは、フォーム内で使用するために還元型で特定の値(必ずしもすべての値を意味するわけではありません)を取得するように作成されました。あれは正しいですか ? formValueSelectorを使用する必要がある場合は、すべてのフォームフィールドをセレクタに関連付ける必要がありますか?もう一度ありがとう! –

    +1

    編集:オールライト、私はそれがformValueSelectorで作業作られたが、その後、私はgetFormValuesで再びそれを試してみましたが、これが今の私のために働いている正確な構文です: 'constのセレクタ= getFormValues(「fomName」) 一覧=接続(私の元の質問の他の構文は機能していませんでした。{状態=>({値:セレクタ(状態)})}(リスト) ' たぶん誰かを助けるでしょう! –

    1

    私は同じ問題を抱えていました。どうやら、 '値'は還元型の保存された名前です。私はこの問題を解決するために管理Iurii Budnikovアドバイス使い方 - ちょうどあなたの接続コールで何か他のものに「値」から変数名を変更します。

    List = connect(
        state => ({ 
        formValues: getFormValues(state.form.formName) 
        }) 
    )(List) 
    
    3

    formValueSelector()する必要はありません。

    また、プロパティとして直接アクセスすることもできます。

    List = connect(
        state => ({ 
        formValues: { 
         id: formValueSelector('formName')(state, 'id') 
        } 
        }) 
    )(List) 
    
    +0

    どのようなフォームからでも値を更新するのと同じテクニックを知っていますか? – stackdave

    +1

    https://redux-form.com/7.3.0/docs/api/actioncreators.md/ 1.「redux-form/es/actions」からreduxFormActionsをインポートします。 2.変更アクションをreduxでバインドします。bindActionCreators(reduxFormActions.change、dispatch) 3.呼び出しアクション:this.props.actionsReduxForm( 'formName'、fieldName、fieldValue) – Julha

    0

    と同じ

    List = connect(
        state => ({ 
        formValues: { 
         id: state.form.formName.values.id 
        } 
        }) 
    )(List) 
    

    Reduxのフォーム6.0.0(および7.0.0でも同じ)から始めて、あなたはどのReduxのから値を選択するように機能formValueSelector()を使用することができ、あなたのアプリケーションに持って形成します。 http://redux-form.com/7.0.0/docs/api/FormValueSelector.md/

    import { connect } from 'react-redux'; 
    import { formValueSelector } from 'redux-form'; 
    
    const selector = formValueSelector('formName'); 
    
    List = connect(
        state => ({ 
        name: selector(state, 'name') 
        }) 
    )(List) 
    
    +0

    プレビューを作成しようとしていますユーザーがフォームを送信する前にすべての値が表示されるコンポーネント。私は "ウィザード"という名前のウィザードフォームからすべてのフォーム値を取得しようとしています。この答えに続いて、私は "ウィザードが定義されていません"というエラーを表示します。私は何をすべきか? –

    関連する問題