【问题标题】:Redux Form props not displaying in event handlerRedux Form 道具未显示在事件处理程序中
【发布时间】:2017-01-26 14:32:50
【问题描述】:

我正在构建一个非常简单的前端应用程序来连接一些 API。我有一个 redux 表单,它应该触发一个事件处理程序,然后触发一个动作创建者。事件处理程序目前没有收到任何道具(只是得到一个空对象)。这是我的组件

import React, { Component } from 'react'
// import { Link } from 'react-router'
import { reduxForm } from 'redux-form'
import fetchConcerts from '../actions/fetchConcerts.js'

class ListContainer extends Component {

  handleFormSubmit(formProps){
    event.preventDefault()
    debugger
    this.props.fetchConcerts(formProps)

  }


  render(){
    const { fields: { userCity, userDate }, handleSubmit } = this.props;


        return (
            <div>
            <form onSubmit={handleSubmit(this.handleFormSubmit.bind(this))} >
                <label>City</label>
                <input type="text" className="form-input" {...userCity} />
                <label>Date</label>
                <input type="text" className="form-input" {...userDate} />
                <input type="submit" value="Submit" />
            </form>
            </div>
        );
      }
    }


export default reduxForm({
      form: 'search',
      fields: ['userCity', 'userDate']
    }, null, { fetchConcerts })(ListContainer);

App.js(父组件)如下-->

import React, { Component } from 'react';
import ListContainer from './containers/ListContainer.js'
import './App.css';

export default class App extends Component {


  render() {
    return (
      <div className="App">
        <ListContainer />
      </div>
    );
  }
}

提交后,handleFormSubmit 被启动,我点击了调试器,但 formProps 是 Object = {}

有什么想法吗?我在使用 redux 表单时经常遇到这个问题,但我永远无法真正弄清楚我哪里出错了。

谢谢

【问题讨论】:

  • 你用的是什么版本的 redux-form?
  • 这似乎不是一个有效的版本:github.com/erikras/redux-form/tags?after=v4.0.4。如果您确实使用的是旧版本,您可能想尝试使用最新的 (6.x),因为创建者已经修复了大量错误
  • 嗯,当我尝试更新任何软件包时,npm 向我抛出了一大堆错误。这是看起来的问题之一:npm ERR! peer dep 缺失:react-redux@^4.3.0,redux-form@6.0.5 npm ERR 需要! peer dep 缺失:redux@^3.0.0,redux-form@6.0.5 需要
  • 所以我解决了依赖关系并更新了一切——没有错误,使用 redux-form 6.0.5 仍然有同样的问题
  • 如果将handleFormSubmit 方法移动到App,然后添加&lt;ListContainer onSubmit={this.handleFormSubmit} /&gt;,会发生什么情况

标签: javascript reactjs react-redux redux-form


【解决方案1】:

您是否尝试访问输入字段中输入的值?如果是,这可能会有所帮助:

handleFormSubmit(event) {
  event.preventDefault();

  // Access value and attributes of the City input
  console.log(event.target.elements[0].value);
  console.log(event.target.elements[0].attributes);

  // Access value and attributes of the Date input
  console.log(event.target.elements[1].value);
  console.log(event.target.elements[1].attributes);    
}

这里有一个工作演示:http://codepen.io/PiotrBerebecki/pen/vXXXaJ

【讨论】:

  • redux 表单应该包装组件,因此您不需要这样做——它应该在工作时自动将输入值传递给道具。谢谢!!
【解决方案2】:

虽然我没有使用过redux-form,但我认为问题在于您的代码,您可以将&lt;form onSubmit={handleSubmit(this.handleFormSubmit.bind(this))} &gt; 更改为

<form
    onSubmit={ (event) => {
            handleSubmit( this.handleFormSubmit.bind(this, event, formProps) );
        }
    }
>

还有你的 handleFormSubmit 函数来

handleFormSubmit(event, formProps){
    event.preventDefault()
    debugger
    this.props.fetchConcerts(formProps)
}

编辑#1

查看redux-form 文档后,您可以将表单更改为

<form
    onSubmit={ (event) => {
            handleSubmit( data => { this.handleFormSubmit.bind(this, event, data) } );
        }
    }
>

它应该可以工作。


为了进一步简化事情

您可以将form component 代码更改为

<form onSubmit={ handleSubmit( data => { this.handleFormSubmit.bind(this, data) } ) } >

handleFormSubmit函数来

handleFormSubmit(data){
    console.log('form data', data);
    this.props.fetchConcerts(data)
}

【讨论】:

  • 嗯,我仍然遇到同样的问题,现在它要我在某处声明 formProps .. redux-forms 的文档非常糟糕:-/ 现在玩所有东西
  • @tqr_aupa_atleti 更新了答案,希望对您有所帮助。
  • 谢谢!是的,上面的代码完全绕过了我的事件处理程序。这很奇怪,我觉得我的代码与以前的项目完全相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 2014-06-13
  • 2022-08-09
  • 1970-01-01
  • 2014-11-27
相关资源
最近更新 更多