redux-form 中的同名字段
Same name of field in redux-form
我正在处理评论部分并使用 redux-form 来获取输入。我只有一个 Field 组件用于接收输入。但是当我在输入框中键入时,所有输入框都会填充相同的值。我知道这是因为所有这些输入框都具有相同的名称。但是我只想将值填充到选中的输入框。我该怎么做?
这是我的组件:
import { compose } from "redux";
import { connect } from "react-redux";
import React, { Component } from "react";
import { Field, reduxForm } from "redux-form";
import { addComment, fetchPosts } from "../../../actions/FeedPost";
import "./FeedCommentsInput.css";
import TextareaAutosize from "react-textarea-autosize";
class FeedCommentsInput extends Component {
renderField = field => {
const { touched, error } = field.meta;
const className = `comment-input-box ${
touched && error ? "red-border__error-comment" : ""
}`;
return (
<TextareaAutosize
{...field.input}
placeholder={field.placeholder}
type={field.type}
className={className}
/>
);
};
onSubmit = formProps => {
const { postid } = this.props;
this.props.addComment(formProps, postid);
};
render() {
const { handleSubmit } = this.props;
return (
<div>
<form onSubmit={handleSubmit(this.onSubmit)}>
<Field
name="text"
component={this.renderField}
type="text"
placeholder="Enter your Comment"
/>
<button type="submit">Submit</button>
</form>
</div>
);
}
}
const validate = values => {
const errors = {};
if (!values.comment) errors.comment = "Please Enter Something";
return errors;
};
export default compose(
connect(
null,
{ addComment, fetchPosts }
),
reduxForm({ validate, form: "commentbox" })
)(FeedCommentsInput);
只需将唯一的 form
属性传递给您的表单组件。
您的 redux-form
集成将更改为 :
// No need to configure `form`, because it would be set dynamically via props
reduxForm({ validate })
用法:
<Form form={`commentbox_${uuid}`} />
.
您有很多评论表单,但所有评论框都使用相同的表单 (commentbox
),这会造成问题。
您需要动态创建一个带有索引后缀的表单:
const commentForm1 = reduxForm({ validate, form: "commentbox_1" })
const commentForm2 = reduxForm({ validate, form: "commentbox_2" })
这就是为什么我认为在使用像 reduxForm
这样的复杂库时,建立一个基本案例并使其正常工作很重要。我的意思是我会首先实现一个简单的表单,确保在继续编写您编写的大量代码之前可以正常工作,以便稍后发现某些地方无法正常工作。
例如,我会这样开始:
class FeedCommentsInput extends Component {
render() {
return (
<div>
<form onSubmit={this.props.handleSubmit(values => console.log(values))}>
<Field type=“text” name=“feedTitle” component=“input” />
<button type=“submit”>Submit</button>
</form>
</div>
);
}
}
export default reduxForm({ form: 'FeedCommentsInput' })(FeedCommentsInput);
没有验证,没有别的,只有这个简单的设置,当然包括导入和导出语句。现在有了这个设置,当用户提交表单时,redux 表单传递给我们的函数将被调用,它将在内部调用我在 onSubmit
.
中传递的函数
然后我会转到浏览器并通过添加一些文本并单击提交来测试它,当我这样做时我应该看到一个控制台日志,其中包含 feedTitle
键和我的文本值输入。
简而言之,这几乎就是 reduxForm
的整个流程,我首先要建立它以确保一切正常。
当我将 onSubmit
处理程序添加到表单,然后在其中调用 handleSubmit()
并提供我的箭头功能时。每当用户提交表单时,都会自动调用箭头函数。
控制台日志中的值对象是输入到输入中的文本,对象的键是添加到 Field 组件的 name
。这就是为什么 Field
组件所需的 name
属性 也可以用来帮助您的原因。如果您没有看到 feedTitle
,那么在您继续编写验证代码等之前,您就会知道某些东西无法正常工作。
我正在处理评论部分并使用 redux-form 来获取输入。我只有一个 Field 组件用于接收输入。但是当我在输入框中键入时,所有输入框都会填充相同的值。我知道这是因为所有这些输入框都具有相同的名称。但是我只想将值填充到选中的输入框。我该怎么做?
这是我的组件:
import { compose } from "redux";
import { connect } from "react-redux";
import React, { Component } from "react";
import { Field, reduxForm } from "redux-form";
import { addComment, fetchPosts } from "../../../actions/FeedPost";
import "./FeedCommentsInput.css";
import TextareaAutosize from "react-textarea-autosize";
class FeedCommentsInput extends Component {
renderField = field => {
const { touched, error } = field.meta;
const className = `comment-input-box ${
touched && error ? "red-border__error-comment" : ""
}`;
return (
<TextareaAutosize
{...field.input}
placeholder={field.placeholder}
type={field.type}
className={className}
/>
);
};
onSubmit = formProps => {
const { postid } = this.props;
this.props.addComment(formProps, postid);
};
render() {
const { handleSubmit } = this.props;
return (
<div>
<form onSubmit={handleSubmit(this.onSubmit)}>
<Field
name="text"
component={this.renderField}
type="text"
placeholder="Enter your Comment"
/>
<button type="submit">Submit</button>
</form>
</div>
);
}
}
const validate = values => {
const errors = {};
if (!values.comment) errors.comment = "Please Enter Something";
return errors;
};
export default compose(
connect(
null,
{ addComment, fetchPosts }
),
reduxForm({ validate, form: "commentbox" })
)(FeedCommentsInput);
只需将唯一的 form
属性传递给您的表单组件。
您的 redux-form
集成将更改为 :
// No need to configure `form`, because it would be set dynamically via props
reduxForm({ validate })
用法:
<Form form={`commentbox_${uuid}`} />
您有很多评论表单,但所有评论框都使用相同的表单 (commentbox
),这会造成问题。
您需要动态创建一个带有索引后缀的表单:
const commentForm1 = reduxForm({ validate, form: "commentbox_1" })
const commentForm2 = reduxForm({ validate, form: "commentbox_2" })
这就是为什么我认为在使用像 reduxForm
这样的复杂库时,建立一个基本案例并使其正常工作很重要。我的意思是我会首先实现一个简单的表单,确保在继续编写您编写的大量代码之前可以正常工作,以便稍后发现某些地方无法正常工作。
例如,我会这样开始:
class FeedCommentsInput extends Component {
render() {
return (
<div>
<form onSubmit={this.props.handleSubmit(values => console.log(values))}>
<Field type=“text” name=“feedTitle” component=“input” />
<button type=“submit”>Submit</button>
</form>
</div>
);
}
}
export default reduxForm({ form: 'FeedCommentsInput' })(FeedCommentsInput);
没有验证,没有别的,只有这个简单的设置,当然包括导入和导出语句。现在有了这个设置,当用户提交表单时,redux 表单传递给我们的函数将被调用,它将在内部调用我在 onSubmit
.
然后我会转到浏览器并通过添加一些文本并单击提交来测试它,当我这样做时我应该看到一个控制台日志,其中包含 feedTitle
键和我的文本值输入。
简而言之,这几乎就是 reduxForm
的整个流程,我首先要建立它以确保一切正常。
当我将 onSubmit
处理程序添加到表单,然后在其中调用 handleSubmit()
并提供我的箭头功能时。每当用户提交表单时,都会自动调用箭头函数。
控制台日志中的值对象是输入到输入中的文本,对象的键是添加到 Field 组件的 name
。这就是为什么 Field
组件所需的 name
属性 也可以用来帮助您的原因。如果您没有看到 feedTitle
,那么在您继续编写验证代码等之前,您就会知道某些东西无法正常工作。