reactjs - 为什么在异步调用的 React js 中刷新时不呈现数据?
问题描述
我正在创建编辑表单。首先我必须获取数据来编辑表单,我在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>
但是当我刷新当前页面时,值不会呈现为要编辑的表单。我正在使用 redux 方法进行状态管理,请指导我,我是新手。
解决方案
可能会ComponyForm
在其生命周期函数上初始化表单componentDidMount
,所以当editUser
到达时什么都不会改变。
一种处理方法正在改变:
<CompanyForm handleActionParent={this.handleAction} companyDataFP={editUser} />
至:
{editUser.name && <CompanyForm handleActionParent={this.handleAction} companyDataFP={editUser} />}
推荐阅读
- azure - 限制管理员对 Azure 广告 B2C 用户数据的访问
- javascript - javascript提升:解释输出
- r - R Web 用 rvest 抓取 coinmarketcap
- reactjs - 您似乎正在将关键帧声明 (hVshE) 插入到未标记的字符串中
- ethereum - 关于以太坊ERC标准ERC1400的问题
- excel-formula - 如何在 Excel 中识别对的唯一组合?
- bitbucket-pipelines - 在管道中获取部署 url
- python - 我想创建“加入”和“列表”命令
- karate - 有没有办法让空手道项目的所有功能文件中的所有标签都可用?
- python - 如何替换python中字符串中的第一项?