Javascript redux表单中字段的相同名称
我正在处理一个评论部分,并使用redux表单进行输入。我只有一个字段组件用于获取输入。但是当我在输入框中输入时,所有的输入框都被相同的值填充。我知道这是因为所有这些输入框都有相同的名称。但我只想将值填充到选定的输入框中。我该怎么做 以下是我的组件:Javascript redux表单中字段的相同名称,javascript,reactjs,redux,react-redux,redux-form,Javascript,Reactjs,Redux,React Redux,Redux Form,我正在处理一个评论部分,并使用redux表单进行输入。我只有一个字段组件用于获取输入。但是当我在输入框中输入时,所有的输入框都被相同的值填充。我知道这是因为所有这些输入框都有相同的名称。但我只想将值填充到选定的输入框中。我该怎么做 以下是我的组件: import { compose } from "redux"; import { connect } from "react-redux"; import React, { Component } from "react"; import { Fi
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);
从“redux”导入{compose};
从“react redux”导入{connect};
从“React”导入React,{Component};
从“redux表单”导入{Field,reduxForm};
从“../../../actions/FeedPost”导入{addComment,fetchPosts}”;
导入“/FeedCommentsInput.css”;
从“react textarea autosize”导入textarea autosize;
类FeedCommentsInput扩展了组件{
renderField=字段=>{
const{toucted,error}=field.meta;
const className=`注释输入框${
触摸错误(&R):“红色边框错误注释”:”
}`;
返回(
);
};
onSubmit=formProps=>{
const{postid}=this.props;
this.props.addComment(formProps,posted);
};
render(){
const{handleSubmit}=this.props;
返回(
提交
);
}
}
常量验证=值=>{
常量错误={};
如果(!values.comment)出现错误。comment=“请输入内容”;
返回错误;
};
导出默认组合(
连接(
无效的
{addComment,fetchPosts}
),
reduxForm({validate,form:“commentbox”})
)(输入);
只需将unique表单
道具传递给表单组件即可
您的redux表单
集成将更改为:
// 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);
类FeedCommentsInput扩展组件{
render(){
报税表(
console.log(值))}>
提交
);
}
}
导出默认reduxForm({form:'FeedCommentsInput'})(FeedCommentsInput);
没有验证,没有其他,只是这个简单的设置,当然包括导入和导出语句。现在有了这个设置,当用户提交表单时,redux表单传递给我们的函数将被调用,它将在内部调用我在提交时传递的函数
然后我会进入浏览器,通过添加一些文本并单击submit来测试它,当我这样做时,我会看到一个控制台日志,其中有一个键feedTitle
,以及我键入的文本的值
简而言之,这几乎就是整个reduxForm流程,我会首先建立它来确保一切正常运行
当我将onSubmit
处理程序添加到表单中,然后在其中调用handleSubmit()
并提供我的arrow函数时。每当用户提交表单时,将自动调用arrow函数
控制台日志中的values对象是输入的文本,对象的键是添加到字段组件中的
名称。这就是为什么字段
组件所需的名称
属性也可以用来帮助您的原因。如果您没有看到feedTitle
,那么在您继续编写验证代码等之前,您就会知道某些东西工作不正常。您所说的是什么意思所有的输入框都被填满了
,我只能看到一个文本框here@mbeso他在同一页上多次填写同一份表格。一篇帖子有很多评论。哦,我明白了,这个问题有点奇怪:)看起来你找到了你问题的答案,我建议将来在询问关于reduxForm
的状态时,包括你的reducers/index.js
文件,这样我们就可以看到你是如何设置formReducer
@Daniel的,好的,我会记住这个事实上这和我的答案是一样的。两次发布相同的答案有什么意义?:)我在10分钟内完成了我的回答,当我开始评论时,我没有看到你的aswer=)@JordanEnev,正如你所知,帖子会被审核,所以我不会担心。如果有什么疏忽,就会得到解决。