redux-form(版本6.4.3)不显示错误

时间:2017-01-02 08:19:41

标签: reactjs redux-form

下面的

是redux-form的代码。一切都与redux商店完美配合,但我无法在span元素中显示错误消息。

import React from 'react'
import { Button } from 'react-bootstrap'
import { Field, reduxForm } from 'redux-form'

const validate = (values) => {
    const errors = {}
    if (!values.firstname) {
        errors.firstname = 'Required'
    }
    return errors
}

const renderInput = (field) => (
    <div>
        <label>{field.placeholder}</label>
        <div>
            <input {...field.input}/>
            {field.error && <span>{field.error}</span>}
        </div>
    </div>
)

@reduxForm({
    form: 'addUserForm',
    validate
})

export default class CreateUserForm extends React.Component {
    render() {
        const {addUser, handleSubmit} = this.props
        return (
            <form onSubmit={handleSubmit(addUser)}>
                <Field type="text" placeholder="First name" component={renderInput} name="firstname" />
                <Button type="submit" className="btn btn-success">Submit</Button>
            </form>
        )
    }
}

我可以清楚地看到验证功能有效(参见下面的屏幕截图)

enter image description here

<span></span>元素中没有任何内容,这意味着 field.error 没有值。我也没有收到任何错误消息。

有人知道这里发生了什么吗?

谢谢, 托马斯

1 个答案:

答案 0 :(得分:5)

您的renderInput不完整。

官方document显示:

const renderField = ({ input, label, type, meta: { touched, error, warning } }) => (
  <div>
    <label>{label}</label>
    <input {...input} placeholder={label} type={type}/>
    {
      touched && (
        (error && <span>{error}</span>) || (warning && <span>{warning}</span>)
      )
    }
  </div>
)

观察传递给renderField的对象,参数:meta: { touched, error, warning }

关于这一点,你的renderInput不应该是:

const renderInput = (field) => (
  <div>
    <label>{field.placeholder}</label>
    <div>
      <input {...field.input}/>
      {field.meta.error && <span>{field.meta.error}</span>}
    </div>
  </div>
)

缺少=&gt; field.meta.error