Javascript Redux表单-表单中未加载初始值
这方面的新手 我有一个相当长的表单,用作更改客户详细信息的编辑表单。表单加载,但不加载任何值。有人建议为字段(如“foo”和“bar”)硬编码一些值,这样我就可以在文本字段中获得这些字符串 以下是我在表格末尾的代码,用于硬编码有效的初始值:Javascript Redux表单-表单中未加载初始值,javascript,redux,redux-form,Javascript,Redux,Redux Form,这方面的新手 我有一个相当长的表单,用作更改客户详细信息的编辑表单。表单加载,但不加载任何值。有人建议为字段(如“foo”和“bar”)硬编码一些值,这样我就可以在文本字段中获得这些字符串 以下是我在表格末尾的代码,用于硬编码有效的初始值: let ClientForm = reduxForm({ form: CLIENT_FORM_NAME, })(Client) ClientForm = connect( state => (
let ClientForm = reduxForm({
form: CLIENT_FORM_NAME,
})(Client)
ClientForm = connect(
state => ({
initialValues: { account: 'foo', bsb: 'bar', }
}),
{ reducer } // bind client loading action creator
)(ClientForm)
export default ClientForm
但是,如果我使用以下代码,即使“state.editClient”具有这些值,也不会发生任何事情
let ClientForm = reduxForm({
form: CLIENT_FORM_NAME,
})(Client)
ClientForm = connect(
state => ({
initialValues: state.editClient // pull initial values from client reducer
}),
{ reducer } // bind client loading action creator
)(ClientForm)
export default ClientForm
现在,我使用以下导入操作导入减速器:
import reducer from '../edit/reducer'
没有错误-它找到了这个
这是减速器:
import { fetch, addTask } from 'domain-task'
import { getJwt } from '../../../auth/jwt'
import { handleErrors } from '../../../utils/http'
import {
REQUEST_CLIENT_TO_EDIT,
RECEIVE_CLIENT_TO_EDIT,
ERROR_CLIENT_EDIT,
} from './actions'
const initialState = {
isLoading: false,
isEditMode: null,
error: null,
id: null,
clientNo: null,
company: false,
companyName: null,
abn: null,
isWarrantyCompany: false,
requiresPartsPayment: false,
companyEmail: null,
clientFirstName: null,
clientLastName: null,
mobilePhone: null,
phone: null,
email: null,
notes: null,
bankName: null,
bsb: null,
account: null,
activity: false,
active: false,
dateCreated: null,
userName: null,
}
export default (state = initialState, action) => {
switch (action.type) {
case REQUEST_CLIENT_TO_EDIT:
return {
...state,
id: action.payload,
isLoading: true,
error: null,
}
case RECEIVE_CLIENT_TO_EDIT:
return {
...state,
...action.payload,
isLoading: false,
error: null,
}
case ERROR_CLIENT_EDIT:
return {
...state,
isLoading: false,
error: action.payload,
}
default:
return state
}
}
这由操作调用,并导致状态被更新
这是一张在chrome的redux工具中显示editClient的图片
为什么页面不加载“editClient”?我错过了什么或误解了什么
顺便说一下,这是客户机的完整表单(我认为最好将完整的上下文重新设置为表单):
import React,{PropTypes}来自“React”
从'redux form'导入{Field,reduxForm,FormSection}
从“react redux”导入{connect}
从“react bootstrap”导入{Col,Row}
从“react bootstrap”导入{按钮、图标、面板}
从“时刻”导入时刻
从“../../Address/addressContainer”导入地址
从“../../formComponents/FormField”导入FormField
从“../../formComponents/CheckboxField”导入CheckboxField
从“../../formComponents/TextField”导入文本字段
从“../../formComponents/StaticText”导入StaticText
从“../../formComponents/TextAreaField”导入TextAreaField
从“../../formComponents/DateField”导入日期字段
从“../edit/reducer”导入减速机
导出常量客户端\u表单\u名称='CLIENT'
const required=value=>(值?未定义:“required”)
常量maxLength=max=>value=>
value&&value.length>max`必须为${max}个字符或更少“:未定义
常量编号=值=>
值(&&isNaN(数字(值))?'必须是一个数字:未定义
const minValue=min=>value=>
值&&value
价值&/^[A-Z0-9.\%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.测试(值)
? '无效的电子邮件地址'
:未定义
const toold=value=>
值&&value>65?'您可能太老了,无法进行此操作:未定义
常数aol=值=>
value&&/+@aol\.com/.test(value)
? '真正地你还在用美国在线发邮件吗?”
:未定义
常量emobilephone=value=>{
如果(!值){
返回值
}
const onlyNums=value.replace(/[^\d]/g',)
如果(仅限长度)
)}
{公司价值&&(
{isqualitycompanyvalue&&(
)}
)}
提交
{' '}
清楚的
)
}
让ClientForm=reduxForm({
形式:客户名称,
})(客户)
ClientForm=connect(
状态=>({
initialValues:state.editClient//从客户机中提取初始值
}),
{reducer}//绑定客户端加载操作创建者
)(客户表格)
导出默认ClientForm
在导出ClientForm之前,您正在重新定义它
尝试创建一个新变量以将connect输出分配给它
let ClientForm = reduxForm({
form: CLIENT_FORM_NAME,
})(Client)
let ClientForm2 = connect(state => ({
initialValues: { account: 'foo', bsb: 'bar', }
}),
{ reducer } // bind client loading action creator
)(ClientForm)
export default ClientForm2
我找到了问题和原因。这不是因为重新定义或创建新变量。 在更新减速器后,表单未重新初始化。 因此,道具中的这个标志
enableReinitialize:true
帮助我解决了这个问题。
如果有人面临同样的问题,就把它放在这里,因为这是一个非常烦人的问题。这确实有效!!你能不能解释一下我做错了什么,以及为什么你需要创建另一个变量来连接状态……在电话上,所以我不能很好地解释。按照您的方式,您将connect函数的输出传递给它本身,因此我们得到了不可预测的行为。通过创建一个单独的变量,可以将redux表单传递给connect函数的输出。将clientform初始化为const会更安全,这样您就不会意外地再次遇到此问题(或者至少会得到更好的错误消息)。我遇到了完全相同的问题,我尝试了建议的步骤。它对我仍然不起作用。如果我硬编码initialvalues,它会工作,但是如果值在稍后的阶段之后来自reducer,则表单不会加载初始值。有什么建议吗?
let ClientForm = reduxForm({
form: CLIENT_FORM_NAME,
})(Client)
let ClientForm2 = connect(state => ({
initialValues: { account: 'foo', bsb: 'bar', }
}),
{ reducer } // bind client loading action creator
)(ClientForm)
export default ClientForm2