2017-05-23 6 views
1

redux-form의 버전 6.7.0을 사용하고 있습니다. Axios는 httpx 요청을 성공적으로 수행하면 초기화 할 수 없습니다. "fetchPerson"redux 조치. ReduxForm을 내보낼 때 여전히 "enableReinitialize : true"로 설정하고 있지만 여전히 결과를 렌더링하지 않습니다. (, BTW 유효성 검사 기능, 호출되지 않는) 여기 내 감속기의 전체 코드redux-form을 Axios에서 가져온 값으로 초기화 할 수 없습니다.

: 여기

import React, { Component } from 'react'; 
import { Field, reduxForm } from 'redux-form'; 
import { fetchPerson, editPerson } from '../actions'; 
import { connect } from 'react-redux'; 
import { Link} from 'react-router-dom'; 
import 'react-table/react-table.css'; 


class EditPerson extends Component { 
    componentDidMount() { 

    const { id } = this.props.match.params; 
    this.props.fetchPerson(id); 

    } 

    renderField(field) { 
    const { meta: { touched, error } } = field; 
    const className = `form-group ${touched && error ? 'has-danger' : ''}`; 

    return (

     <div className={className}> 
     <label>{field.label}</label> 
     <input 
      className="form-control" 
      type="text" 
      {...field.input} 
     /> 
     <div className="text-help"> 
      {touched ? error : ''} 
     </div> 
     </div> 
    ); 
    } 

    onSubmit(values) { 
    const { id } = this.props.match.params; 
    this.props.editPerson(id,values,() => { 
     this.props.history.push('/personas'); 
    }); 
    } 

    render() { 
    const { handleSubmit } = this.props; 
    const { person } = this.props; 
    if (!person) { 
     return <div>Loading...</div>; 
    } 
    console.log("this.props"); 
    console.log(this.props); 
    return (
      <div className="row"> 
       <div className="col-lg-12"> 
        <div className="row wrapper border-bottom white-bg page-heading"> 
         <div className="col-lg-10"> 
          <h2>Editar Persona {person.name}</h2> 
          <ol className="breadcrumb"> 
           <li> 
            <a href="index.html">Home</a> 
           </li> 
           <li> 
            <a href="personas/">Personas</a> 
           </li> 
           <li className="active"> 
            <strong>Editar Persona :{person.name}</strong> 
           </li> 
          </ol> 
         </div> 
        </div> 
       </div> 

       <div className="wrapper wrapper-content animated fadeInRight"> 

        <div className="row"> 
         <div className="col-lg-6"> 
          <div className="row"> 
           <div className="col-lg-12"> 
            <div className="well" style={{background: 'white'}}> 
            <h3>Datos</h3> 

             <form onSubmit={handleSubmit(this.onSubmit.bind(this))}> 
             <Field 
              label="Nombre" 
              name="name" 
              component={this.renderField} 
             /> 
             <Field 
              label="Email" 
              name="email" 
              component={this.renderField} 
             /> 
             <Field 
              label="Telefono" 
              name="tel" 
              component={this.renderField} 
             /> 
             <button type="submit" className="btn btn-primary">Submit</button> 
             <Link to="/personas" className="btn btn-danger">Cancel</Link> 
             </form> 

            </div> 

           </div> 
          </div> 
         </div> 
        </div> 

       </div> 
      </div> 
     ) 
    } 

} 

function validate(values) { 
    // console.log(values) -> { title: 'asdf', categories: 'asdf', content: 'asdf' } 
    const errors = {}; 

    // Validate the inputs from 'values' 
    if (!values.name) { 
    errors.title = "Enter a name"; 
    } 
    if (!values.email) { 
    errors.categories = 'Enter some email'; 
    } 
    if (!values.tel) { 
    errors.content = 'Enter some content telefono'; 
    } 

    return errors; 
} 

function mapStateToProps(state) { 
    console.log("state mapStateToProps"); 
    console.log(state); 
    return { 
     person: state.personas.person, 
     initialValues:state.personas.person, 
    } 
}; 


export default reduxForm({ 

    enableReinitialize : true, 
    form: 'PersonEditForm' 
})(
    connect(mapStateToProps,{ editPerson, fetchPerson })(EditPerson) 
); 

personas.person이이 두 번째 줄에서 만든 것 브라우저 콘솔은 다음과 같습니다

1

+0

예시 페르소나를 보여줄 수 있습니까? initialValues를 사용하면 필드의'''name''' prop와 persona 객체의 키가 일치해야합니다. 또한 initialValues ​​소품이 제대로 폼에 전달되는지 확인하기 위해 componentWillReceiveProps 함수를 만들어 볼 수도 있습니다. –

+0

안녕하세요 스티븐! 도와 주셔서 감사합니다. 물론 : persona.person { \t CREATE_TIME : "2017-05-21T16 : 52 : 28.000Z" \t 이메일 : "[email protected]" \t 이름 : "헥터 Bulgarini" \t person_id로 : 63 \t 전화 : "293482956" \t 유형 : null \t update_time : null } 구성 요소 WillReceiveProps에 관해서는 제발 그에게 제발 좀 주시겠습니까? –

+0

사실, this.props 바로 아래에 인쇄 된 객체를 확장 할 수 있어야합니다. initialValues ​​객체가 전달되고 속성이 이름 소품과 일치하는지 확인합니다. –

답변

1

REDUX 양식 문서는 reduxForm 기능하고 접속 기능으로 장식되는 구성 요소를 나타낸다. 같은 뭔가 그것을 깨는 시도 :

EditPerson = reduxForm({ 
... 
})(EditPerson) 

export default connect(mapStateToProps, { ... })(EditPerson) 

또한 값을 한 번만 초기화됩니다 있습니다. 원하는 경우 위에서 initialValues ​​객체를 폼에 전달하고 라이브러리에서 initialize 액션을 전달하여 초기 값을 다시 채울 수 있습니다.

+0

정확히 내가 필요로했던 것처럼 보입니다! 고맙습니다! –