Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Redux表单-表单中未加载初始值_Javascript_Redux_Redux Form - Fatal编程技术网

Javascript Redux表单-表单中未加载初始值

Javascript Redux表单-表单中未加载初始值,javascript,redux,redux-form,Javascript,Redux,Redux Form,这方面的新手 我有一个相当长的表单,用作更改客户详细信息的编辑表单。表单加载,但不加载任何值。有人建议为字段(如“foo”和“bar”)硬编码一些值,这样我就可以在文本字段中获得这些字符串 以下是我在表格末尾的代码,用于硬编码有效的初始值: let ClientForm = reduxForm({ form: CLIENT_FORM_NAME, })(Client) ClientForm = connect( state => (

这方面的新手

我有一个相当长的表单,用作更改客户详细信息的编辑表单。表单加载,但不加载任何值。有人建议为字段(如“foo”和“bar”)硬编码一些值,这样我就可以在文本字段中获得这些字符串

以下是我在表格末尾的代码,用于硬编码有效的初始值:

    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