Почему данные не отображаются при обновлении в ответ JS с асинхронным вызовом? - PullRequest
0 голосов
/ 08 ноября 2018

Я создаю форму редактирования. Сначала мне нужно получить данные для редактирования формы, и я вызываю ее в componentDidMount () . Пожалуйста, см. Код ниже.

import React from 'react';
import CompanyForm from './CompanyForm';
import { connect } from 'react-redux';
import { companyActions } from '../../../redux/actions/company-action';

class EditCompanyPage extends React.Component {
    constructor(props){
        super(props);
    };
    componentDidMount () {
        const { id } = this.props.match.params
        const { dispatch } = this.props;
        dispatch(companyActions.getCompany(id));
    }
    render(){
        const {editUser } = this.props;
        return(
            <div>
                <h1>Edit Company</h1>
                {
                    editUser && <CompanyForm handleActionParent={this.handleAction}  companyDataFP={editUser} />
                }   
            </div>
        );
    };
}
function mapStateToProps(state) {
    const { editUser } = state.companyReducer;

    return {
        editUser
    };
}

const EditCompany = connect(mapStateToProps)(EditCompanyPage);
export default EditCompany;

см. Код для компонента CompanyForm ниже:

import React from 'react';


class CompanyForm extends React.Component {
    constructor(props){
        super(props);
        this.state = {
            company :{
                name        : this.props.companyDataFP.name      || '',
                address1    : this.props.companyDataFP.address1  || '',
            }
        };

        this.handleChange = this.handleChange.bind(this);
        this.handleSubmit = this.handleSubmit.bind(this);

    };

    handleChange(e) {
        const { name, value } = e.target;
        const newState = Object.assign({}, this.state);
        newState.company[name] = value;
        this.setState(newState);
    }



    handleSubmit(e) {
        e.preventDefault();
        return false;
    }
    render(){

        return(
            <div className="col-md-12">
                <form onSubmit={this.handleSubmit}>
                    <div className="row">
                        <div className="col-md-6">
                            <div className='form-group'>
                                <label htmlFor="name">Name</label>
                                <input type="text" name="name" className="form-control" onChange={this.handleChange} value={this.state.company.name} />
                            </div>
                        </div>
                        <div className="col-md-6">
                            <div className='form-group'>
                                <label htmlFor="address1">Address 1</label>
                                <input type="text" name="address1" className="form-control" onChange={this.handleChange} value={this.state.company.address1} />
                            </div>
                        </div>
                    </div>
                    <div className="row">
                        <div className="col-md-12">
                            <div className='form-group'>
                                <input type="submit" className="btn btn-info" value="submit" />
                            </div>
                        </div>
                    </div>
                </form>
            </div>
        );
    };
}

export default CompanyForm;

Работает нормально, когда я получаю доступ к этой форме с

<Link to="/edit-form/:id" >Edit</Link>

но когда я обновляю текущую страницу, значения не отображаются в форме для редактирования. Я использую избыточный подход для управления состоянием, пожалуйста, наведите меня, я новичок, чтобы реагировать.

1 Ответ

0 голосов
/ 08 ноября 2018

Вероятно, ComponyForm инициализирует форму в функции componentDidMount жизненного цикла, поэтому при получении editUser ничего не изменится.

Способ справиться с этим меняется:

<CompanyForm handleActionParent={this.handleAction}  companyDataFP={editUser}  />  

до:

{editUser.name && <CompanyForm handleActionParent={this.handleAction}  companyDataFP={editUser}  />}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...