【发布时间】:2019-07-02 18:19:43
【问题描述】:
无法找到我遇到的问题的直接答案,所以希望 SO 上的人可以帮助我...
我有一个简单的 Redux 表单,它只有一个 First Name 和 Last Name 输入字段。这些字段不是被显式写出,而是以编程方式呈现,如下所示:
...
renderNameInput(field) {
const { content } = this.props;
return (
<Field
id={field}
name={field}
component={FormField}
validate={this.nameValidations}
error={!this.isNameValid(field) ? content.nameError : null}
/>
);
}
...
render() {
<form onSubmit={handleSubmit}>
<div>
{this.renderNameInput('firstName')}
{this.renderNameInput('lastName')}
</div>
</form>
}
我遇到的问题是当字段未验证时显示错误。每个字段至少需要 2 个字符,最多需要 16 个字符(虽然这与我的具体问题无关)。
我想要做的是,当其中一个输入无效时,错误会显示在该输入下。如果两个输入都无效,则错误将显示在两个输入下(在各自位置显示错误的结构和样式当然已经完成,只是不属于这个问题的一部分)
这是我检查错误的方法:
...
isNameValid(field) {
const { formState = {} } = this.props;
const { syncErrors } = formState;
if (syncErrors && syncErrors[field]) {
return false;
}
}
...
组件已连接到 Redux 存储,因此我可以访问表单中的 formState 和 initial 和 values 对象,以及它们何时被 visited、touch编辑等。
如果 - 当用户更改输入值时 - syncErrors 对象在查看商店中的 Redux 状态时看起来像这样(任意):
syncErrors: {
firstName: 'Must be at least 2 characters'
}
然后我想在firstName 输入下显示一条错误消息,但在lastName 输入下没有任何内容。同样,如果lastName 是syncErrors 对象的一部分,那么该输入下也会显示错误。如果firstName 和lastName 都在syncErrors 中,那么两个输入下都会显示错误。
我希望这是有道理的,有人可以为我指明正确的方向。如果需要任何澄清,请告诉我。
谢谢!
【问题讨论】:
标签: javascript reactjs redux react-redux redux-form