Javascript 提交redux表单时如何引用道具
我有两种型号-联系人和备忘。便条属于联系人 我正在试图找到一种在提交函数中引用contactId的方法 我已将contactId从家长传递到表单:Javascript 提交redux表单时如何引用道具,javascript,reactjs,redux,redux-form,Javascript,Reactjs,Redux,Redux Form,我有两种型号-联系人和备忘。便条属于联系人 我正在试图找到一种在提交函数中引用contactId的方法 我已将contactId从家长传递到表单: // parent.js <NoteNewForm contactId={contactId} onCancel={onCancelNewNoteClick}/> 我不知所措。。。任何想法都很好 使现代化下面解决 我使用了来自Skypeckes的建议和链接,这是工作代码: // the submit function const sub
// parent.js
<NoteNewForm contactId={contactId} onCancel={onCancelNewNoteClick}/>
我不知所措。。。任何想法都很好
使现代化下面解决
我使用了来自Skypeckes的建议和链接,这是工作代码:
// the submit function
const submit = (values, dispatch, contactId) => {
var noteData = Object.assign({}, values)
var primary = {
type: "notes",
attributes: noteData
}
var relationships = {
contact: {
data: {
type: "contacts",
id: contactId
}
}
}
var params = createFormattedParams(primary, relationships)
dispatch(createNoteForContact(params))
}
形式如下:
<form onSubmit={handleSubmit((values, dispatch) => {submit(values, dispatch, contactId)})} noValidate
autoComplete="off">
{submit(value,dispatch,contactId)}noValidate
自动完成=“关闭”>
为了传递一些值,应该使用.bind(null,value)
然后在回调中
const submit = (values, dispatch, contactId ) => {
....
var relationships = {
contact: {
data: {
type: "contacts",
id: contactId, // <---------------------
}
}
}
.....
const submit=(值、分派、联系人ID)=>{
....
var关系={
联系人:{
数据:{
类型:“联系人”,
id:contactId,//为了传递一些值,应该使用.bind(null,value)
然后在回调中
const submit = (values, dispatch, contactId ) => {
....
var relationships = {
contact: {
data: {
type: "contacts",
id: contactId, // <---------------------
}
}
}
.....
const submit=(值、分派、联系人ID)=>{
....
var关系={
联系人:{
数据:{
类型:“联系人”,
id:contactId,//更好
为什么不设置一个隐藏的表单字段。通过表单组件的initialValues
属性设置其值。然后在提交函数中,您当然只会将所有字段的值作为参数(v6.x.x)接收
或
在提交函数中调用的传递到表单sendFormData
中的动作创建者可以在传递到表单之前用所需的数据进行包装/组合。这样表单就不需要或不知道数据。它只知道如何收集数据,然后发送数据。单一责任…例如
// Container component wrapping form: Let the code do the talking....
submitNote = (formValues) => {
this.props.createNoteThunk(this.props.contactId, formValues);
}
render() {
return (
<YourForm submitNote={this.submitNote} />
);
}
//容器组件包装表单:让代码说话。。。。
submitNote=(formValues)=>{
this.props.createNoteThunk(this.props.contactId,formValues);
}
render(){
返回(
);
}
更好
为什么不设置一个隐藏的表单字段。通过表单组件的initialValues
属性设置其值。然后在提交函数中,您当然只会将所有字段的值作为参数(v6.x.x)接收
或
在提交函数中调用的传递到表单sendFormData
中的动作创建者可以在传递到表单之前用所需的数据进行包装/组合。这样表单就不需要或不知道数据。它只知道如何收集数据,然后发送数据。单一责任…例如
// Container component wrapping form: Let the code do the talking....
submitNote = (formValues) => {
this.props.createNoteThunk(this.props.contactId, formValues);
}
render() {
return (
<YourForm submitNote={this.submitNote} />
);
}
//容器组件包装表单:让代码说话。。。。
submitNote=(formValues)=>{
this.props.createNoteThunk(this.props.contactId,formValues);
}
render(){
返回(
);
}
以下问题深入探讨了该问题:
简短回答:您可以创建自定义提交处理程序或使用mergeprops。自定义提交处理程序看起来更干净。有关如何使用自定义提交处理程序,请参阅答案
在mapDispatchToProps()
中定义自定义提交处理程序,然后按如下方式调用它:
<form onSubmit={ handleSubmit((values)=>{mySubmitHandler(values, this.props.user);}
{mySubmitHandler(值,this.props.user);}
以下问题深入探讨了该问题:
简短回答:您可以创建自定义提交处理程序或使用mergeprops。自定义提交处理程序看起来更干净。有关如何使用自定义提交处理程序,请参阅答案
在mapDispatchToProps()
中定义自定义提交处理程序,然后按如下方式调用它:
<form onSubmit={ handleSubmit((values)=>{mySubmitHandler(values, this.props.user);}
{mySubmitHandler(值,this.props.user);}
handleSubmit函数看起来像什么我觉得这个方法可能是一种代码味道。表单应该只负责“收集数据”。在上面的方法中,表单还知道如何“发送数据”。这是thunk、saga等的责任。通过隐藏的表单元素或容器组件(包装表单)中的组合提交函数收集数据.Forms应该是哑的,因为它们只连接到redux表单状态树。这样,它们更易于测试,责任更少。我完全同意,我们真正想要的是在表单外部定义的处理程序能够访问它需要的任何值以及表单的输入。您可以使用mer来实现这一点geprops,但这对性能有影响。如果你有更好的解决方案,我很想听听!handleSubmit函数看起来有多像我觉得这个方法的可能副本是一种代码味道。表单应该只负责“收集数据”。在上面的方法中,表单还知道如何“发送数据”。这是thunk、saga等的责任。通过隐藏的表单元素或容器组件(包装表单)中的组合提交函数收集数据.Forms应该是哑的,因为它们只连接到redux表单状态树。这样,它们更易于测试,责任更少。我完全同意,我们真正想要的是在表单外部定义的处理程序能够访问它需要的任何值以及表单的输入。您可以使用mer来实现这一点geprops,但这会影响性能。如果你有更好的解决方案,我很乐意听你这么说!我也有类似的想法,但redux form
的创建者在一些与隐藏字段相关的问题上说,这有点反模式。不幸的是,这并没有真正解释这些问题中的替代方案。谢谢但是他有这个想法!我不同意。:-)这真的一点也不。ID是固有的隐藏字段,是表单数据模型的一部分。否则,上面的答案中还有另一个选项,也是提供的。是的,很公平,只是重复他对其他Qs说的话。我将尝试一下其中的一些答案,看看我的进展如何。谢谢你的帮助g投1/2球的时间