2017-11-12 7 views
0

私が試したことは、Redux-Formのフォームの値をevent.preventDefault()でhandleSubmitに渡すことです。このフォームを送信してもURLは変更されません。Redux - 提出ハンドラでフォーム値を取得し、event.preventDefault()を呼び出す方法

react-routerとする可能性があります。私はreact-routerを使用してい

//form 
class SampleForm extends React.Component { 
    constructor(props) { 
     super(props); 
    } 

    render() {  
     return (
      <div> 
      <form onSubmit={this.props.handleSubmit}>     
       <Field name="body" component="textarea" /> 
       <button type="submit" className="btn">Save</button> 
      </form> 
      </div> 
     ); 
    } 
} 

//container... 
class Container extends React.Component { 
    handleSubmit(event) {   
     event.preventDefault(); 
     //How can I get the values from SampleForm? 
    } 

    render() { 
     return (
      <div> 
       <SampleForm handleSubmit={this.handleSubmit}/> 
      </div> 
     ); 
    } 
} 

はここに...私の試みの抜粋です。このため、フォームを送信すると、URLは送信された値で更新されます。

(私はreact-routerを使用していないときに、これは実現しなかった - 。私は単にhandleSubmit()から値を得ることができる)

何かアドバイスが理解されるであろう。

+0

- 例えばどのようにあなたはredux形式でフォームをラッピングしていますか?これを追加できますか?また、どのように提出をトリガーしていますか?ボタンをクリックするか、Enterキーを押しますか? –

+0

ええ、それは奇妙です。 React-routerはURLの変更を引き起こしません。リクエストをリモートサーバーに渡すのではなく、デフォルトのフォームアクションとして処理します。 'preventDefault()'は、リクエストが最初に開始されるのをブロックする必要があります。だから、誰がリクエストを処理しているのかは関係ありません。 – Jaxx

+0

私はフィールドコンポーネントを使用してあなたを見るだけです。あなたはどこで 'redux-form'を使っていますか?また、 'handleSubmit'関数は' onSubmit' propを使ってRedux-formコンポーネントに渡されます。これはあなたのやり方ではありません –

答えて

0

したがって、SampleFormコンポーネントはRedux-Formでラップされています。この装飾されたコンポーネントは、ハンドラであるコンテナからonSubmitプロップを渡す必要があります。 handleSubmit()を、あなたのためにしようとしているredux-formのhandleSubmit "ミドルウェア"と競合している小道具として渡しています。

は、次のように「handleSubmit」の代わりにに「のonSubmit」を渡すためにあなたのコンテナのコンポーネントを変更し

//container... 
class Container extends React.Component { 
    handleSubmit(event) {   
     event.preventDefault(); 
     //How can I get the values from SampleForm? 
    } 

    render() { 
     return (
      <div> 
       <SampleForm onSubmit={this.handleSubmit}/> 
      </div> 
     ); 
    } 
} 

、あなたのコンテナコンポーネントが正しく引数として引数「値」を受けなければならないとする必要がありますフォームフィールドのキー/値のオブジェクト。 redux-formのミドルウェア(前述したように)はあなたのためにそれを行うので、event.preventDefault()を呼び出す必要はありません。

ので、代わりのhandleSubmit(イベント)、以下のように「値」にイベント引数を変更:あなたのコードの一部を掲載し忘れたように見えます

handleSubmit(values) {   
    console.log(values); 
} 
関連する問題